2013年2月4日星期一

cstring变量与atlsimpstr.h 的异常【创+转】


异常提示:0x78a23bbb (mfc90ud.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00001010 时发生访问冲突。



出错代码段:

void 函数名(CStringArray* abc)
{
int j = 0;CString str;

str=abc->GetAt(j);
if(j++ < abc->GetSize())...语句体...;

str=abc->GetAt(j);
if(j++ < abc->GetSize())...语句体...;

...

}



错误原因分析【来自网络http://fwq.web521.com/host/P1045/A0788855.shtml】:

cstring占用内存比较大,尤其是循环创建一个cstring局部变量时,由于变量是系统自己释放,有时候可能释放的不及时,就容易出问题。所以说在循环里面最好不要创建cstring局部变量。



可修改为以下:

void 函数名(CStringArray* abc)
{
int j = 0;CString str1,str2;//或数组

str1=abc->GetAt(j);
if(j++ < abc->GetSize())...语句体...;

str2=abc->GetAt(j);
if(j++ < abc->GetSize())...语句体...;

...

}