所以我是 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(简要解释为什么这会导致堆损坏会有很大帮助)。