看板 EE_DSnP 關於我們 聯絡資訊
雖然不是作業 但是如果版上高手大概知道問題在哪的話 麻煩指點一下囉 我在寫專題時 宣告了一個base class markov 裡面包了一個class User Markov裡面有一個vector存很多User 另外Markov會new 一個二維陣列 我在destructor會delete 這個陣列 然後有兩個class繼承他 分別是One_Threshold Two_Threshold 我在跑base class時一切正常 但是在跑derive class時 user數量小於100也正常 如果User 的數量超過100 程式還沒跑完會出現 *** glibc detected *** ./Multiple: free(): invalid pointer: 0x090083ba *** 用gdb 打where 他會顯示 #0 0xb7fe1424 in __kernel_vsyscall () #1 0xb7d70941 in raise () from /lib/libc.so.6 #2 0xb7d73e42 in abort () from /lib/libc.so.6 #3 0xb7da8305 in ?? () from /lib/libc.so.6 #4 0xb7db2501 in ?? () from /lib/libc.so.6 #5 0xb7db377e in ?? () from /lib/libc.so.6 #6 0xb7f90441 in operator delete(void*) () from /usr/lib/libstdc++.so.6 #7 0x08048e3c in Markov::~Markov (this=0xbffff2fc, __in_chrg=<value optimized out>) at Multiple.cpp:39 #8 0x0804c491 in Markov_Two_Threshold::~Markov_Two_Threshold ( this=0xbffff2fc, __in_chrg=<value optimized out>) at Multiple.h:81 #9 0x0804c3fa in main () at main.cpp:28 從gdb看起來 好像是delete 出問題 #9那行是 return 0 應該是呼叫derived class destructor時出問題 但是我有cout我內部的變數 程式好像才跑到一半 想請問版友 有沒有遇過類似問題 可能的原因大概會是什麼 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.244.58
johnjohnlin:double free? 12/15 22:10
ric2k1:應該不是,double free 就會寫 double free error...看來是 12/15 22:12
ric2k1:free 到 garbage address 了,請確定一下你 delete 的東西 12/15 22:12
ric2k1:是屬於你管的 (有請 cout 大神),並且檢查一下 delete 與 12/15 22:13
ric2k1:delete[] 有沒有弄錯... 12/15 22:13
timrau:1. 改用cerr看看到底有沒有"跑完",因為cout有內建buffer 12/15 22:18
timrau:或者是死亡之前加個cout.flush()之類的 12/15 22:19
timrau:2. memory問題就用valgrind吧,如果不會太慢的話 12/15 22:19
ji394vul3m6:我看到跟我寫Dlist幾乎一模一樣的error message... 12/16 00:50
ji394vul3m6:問題跟老師說的一樣@@ 12/16 01:03
aitjcize:是不是derived class的destructor多call了base class的? 12/16 09:14
aitjcize:還有destructor要宣告成virtual 12/16 09:14
hunallen:我把derived class變成不要繼承,他在user number大的時候 12/16 10:56
hunallen:我new的pointer在所有動作結束後會指到奇怪的地方,可是 12/16 10:57
hunallen:user number小的時候卻不會 但是我的程式碼都長一樣 12/16 10:58
hunallen:我在檢查看看好了 謝謝 12/16 10:58