CSDN博客

img hahu

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

发表于2004/7/11 3:04:00  1147人阅读

分类: 编程综合

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

相关博文

我的热门文章

img
取 消
img