作者hunallen (一路上有你)
看板EE_DSnP
標題[請益] *** glibc detected ***
時間Wed Dec 15 21:54:52 2010
雖然不是作業
但是如果版上高手大概知道問題在哪的話
麻煩指點一下囉
我在寫專題時
宣告了一個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
1F:推 johnjohnlin:double free? 12/15 22:10
2F:推 ric2k1:應該不是,double free 就會寫 double free error...看來是 12/15 22:12
3F:→ ric2k1:free 到 garbage address 了,請確定一下你 delete 的東西 12/15 22:12
4F:→ ric2k1:是屬於你管的 (有請 cout 大神),並且檢查一下 delete 與 12/15 22:13
5F:→ ric2k1:delete[] 有沒有弄錯... 12/15 22:13
6F:推 timrau:1. 改用cerr看看到底有沒有"跑完",因為cout有內建buffer 12/15 22:18
7F:→ timrau:或者是死亡之前加個cout.flush()之類的 12/15 22:19
8F:→ timrau:2. memory問題就用valgrind吧,如果不會太慢的話 12/15 22:19
9F:→ ji394vul3m6:我看到跟我寫Dlist幾乎一模一樣的error message... 12/16 00:50
10F:→ ji394vul3m6:問題跟老師說的一樣@@ 12/16 01:03
11F:推 aitjcize:是不是derived class的destructor多call了base class的? 12/16 09:14
12F:→ aitjcize:還有destructor要宣告成virtual 12/16 09:14
13F:→ hunallen:我把derived class變成不要繼承,他在user number大的時候 12/16 10:56
14F:→ hunallen:我new的pointer在所有動作結束後會指到奇怪的地方,可是 12/16 10:57
15F:→ hunallen:user number小的時候卻不會 但是我的程式碼都長一樣 12/16 10:58
16F:→ hunallen:我在檢查看看好了 謝謝 12/16 10:58