所以我是一个非常大的新的C++,所以我敢肯定这是一个相对简单的问题,但我有一个传统的C++应用程序我试图跟踪堆腐败问题并已将其被曝此功能:堆损坏错误与删除[]
void LTrimZeros(CString *pstr)
{
char *psz1;
char *psz2;
if (pstr->GetLength() == 0)
return;
psz1 = new char[pstr->GetLength() + 1];
psz2 = psz1;
strcpy_s(psz2, strlen(psz2), (const char *) *pstr);
while (*psz2 == '0')
{
psz2++;
}
*pstr = psz2;
delete [] psz1;
return;
}
当它试图删除psz1
它抛出一个堆损坏错误。我再次对C++很陌生,所以我不想试图解决这个问题,并不小心引入了内存泄漏,所以我想我会问专家。同样的功能的替代解决方案也很好,因为这个应用程序最初是用C++ 4编写的,但现在升级到C++ 11(也简单解释了为什么这会导致堆损坏会有很大帮助)。
那是生产代码吗? – trojanfoe 2013-04-22 15:17:57
使用'std :: string'句号!摆脱所有的指针嘟嘟混杂。 – 2013-04-22 15:18:33
在whilte循环中,它是* psz2 =='0'?或者你的意思是* psz2 ==''0' – Ali 2013-04-22 15:19:16