目前我正在开发一些代码,这些代码在Win XP上运行,在Win 7上运行在调试环境中。但是在使用堆损坏的版本中,它失败了。非常感谢你的帮助。
char *strr = NULL;
if (SomeValue!= NULL)
{
while(SomePos != NULL)
{
CString strTemp; double SomeAmount;
strTemp.Format("%f",SomeAmount );
strr = new char[strlen((LPCTSTR)strTemp + 1)];
strcpy(strr,LPCTSTR(strTemp));
if(strr)
{
strr = NULL;
delete[] strr;
}
}
}
看这个,我可以弄清楚在删除字符指针时遗漏了一些东西。
答案 0 :(得分:11)
你的括号在错误的地方。你打算写:
strlen((LPCTSTR)strTemp) + 1
因此,您将分配一个比它需要的短两个字符的缓冲区。
使用GetLength()
方法更有意义:
strr = new char[strTemp.GetLength() + 1)];
这段代码显然是错误的:
strr = NULL;
delete[] strr;
当然,您不能指望在delete[]
上使用NULL
。
答案 1 :(得分:7)
我认为你的意思是:
strr = new char[strlen((LPCTSTR)strTemp) + 1];
此+1代表'\ 0'对吧?