作者Carbontube (碳管)
看板C_and_CPP
标题[问题] free会引起crash
时间Sat Mar 21 15:49:10 2009
宣告一个class complex 内有+-*/
typedef real double;
class complex {
public :
real Re;
real Im;
complex(real a, real b);
complex();
complex operator+(complex);
complex operator+(real);
complex operator-(complex);
:
:
};
complex Eular(real );
complex abs(complex );
现在开始用这class做些计算
complex *y;
y = (complex*)calloc(n,sizeof(complex));
:
:
:
TF[i] = abs(y[i]) ....
free(y);
编译可过,但会挂在math.h里面的 abs中
查找了半天,发现把free那行comment out掉就没事
那请问为何会这样哩QQ
是这样我就无法free记忆体了吗QQ thx
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.117.67.58
※ 编辑: Carbontube 来自: 59.117.67.58 (03/21 15:52)
1F:推 Bencrie:用的compiler是 ? 03/21 16:06
2F:推 legnaleurc:请用new 03/21 16:38
3F:推 stonehomelaa:C++请用new/delete 03/21 17:52
4F:→ TConvertible:n 是否 >= i ??? 超出你配置的范围 03/21 18:41
5F:推 ast9869:依照经验来看 超出你配置的范围+1 03/21 20:53
6F:→ Carbontube:看不懂楼上大大,超过范围该是直接在loop内crash 03/22 03:59
7F:→ Carbontube:且与free与否无关吧...? 03/22 03:59
8F:→ Carbontube:怎会不free就没事,free就crash 03/22 04:00
9F:推 Ebergies:不一定 03/22 09:08
10F:推 ast9869:这个就要请高手解译为什麽了!我只知道 超过配置时会出事 03/24 01:54
11F:→ ast9869:但不一定在哪里出事!有时候可能不在 function内出事 03/24 01:55
12F:→ ast9869:当在function 以外出事,这个bug就难找了 03/24 01:56
13F:推 ast9869:你可能要用肉眼看 memery window的变化是不是超过当初所 03/24 01:58
14F:→ ast9869:new 的范围, 或是new 和 delete 之间的code 一行一行mark 03/24 01:59
15F:→ ast9869:看看是mark 哪一行後,就没事了,那里肯定有问题 03/24 02:00
16F:推 sunneo:我想你还是乖乖用new/delete比较好 03/24 23:15
17F:→ Carbontube:没错,是中间回圈超过范围了,谢谢高手们:) 03/26 00:42