这两天做东西出现的低级错误[2004年4月18日 13:38]

1。在C编程中

把变量定义放在执行语句中间,出现莫名其妙的错误

如:

int a;

printf(“%d/n“,a);

int b;

C学得不到家,找了好几天都没觉得是错的。

2。AnsiString , CString在结构体中定义的问题

typedef struct tagTmp
{
   AnsiString str1;
   AnsiString str2;
}Tmp;

Tmp *p = new Tmp[10];
delete []p;
上面有错误吗?每次运行以后多发生错误。刚开始在BCB下面用,每次都不提示在那里出错。在VC下一用delete []p出错。一直都在说CString不稳定,或许就是说这个了
可能是AsniString,CString不是'/0'结尾的且不定长,这样delete 的空间,就不准确了
于是Error 发生了

换成

typedef struct tagTmp
{
   char str1[10];
   char str2[20];
}Tmp;

Tmp *p = new Tmp[10];
delete []p;

问题解决

2004年4月22日补:

真的解决了吗?其实并没有解决。在CSDN发了个贴子,发现用CString作为struct的元素再delete不会出错。这是怎么回事?想想确实也是作为C++的一个类,Delete是调用CString的析构函数来清除的,应该不会出什么问题。现在想回到出错的地方去。竟然回不去了,晕死。在BCB里面AnsiString作为struct的元素的程序把AnsiString全部改成char数组以后,问题依然。把结构指针删除,就出现莫名其妙错误。怎么回事

2007年7月11日补:

后来想到一个可能出错的原因:在new 了结构体以后,一般都用memset进行清零,这样同时也把CString,AnsiString这些对象的初始化信息清除掉了,这样字符串的边界不清楚,自然出错了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值