新char之后堆积腐败[strlen

时间:2013-12-11 15:03:13

标签: c++

目前我正在开发一些代码,这些代码在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;
        }

     }
}

看这个,我可以弄清楚在删除字符指针时遗漏了一些东西。

2 个答案:

答案 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'对吧?