作者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