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日补:
真的解决了吗?其实并没有解决。在优快云发了个贴子,发现用CString作为struct的元素再delete不会出错。这是怎么回事?想想确实也是作为C++的一个类,Delete是调用CString的析构函数来清除的,应该不会出什么问题。现在想回到出错的地方去。竟然回不去了,晕死。在BCB里面AnsiString作为struct的元素的程序把AnsiString全部改成char数组以后,问题依然。把结构指针删除,就出现莫名其妙错误。怎么回事
2007年7月11日补:
后来想到一个可能出错的原因:在new 了结构体以后,一般都用memset进行清零,这样同时也把CString,AnsiString这些对象的初始化信息清除掉了,这样字符串的边界不清楚,自然出错了