] 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
'std :: string' 마침표를 사용하십시오! 모든 포인터가 엉망으로되는 것을 제거하십시오. –
whilte 루프에서는 * psz2 == '0'입니까? 또는 * psz2 == '\ 0' – Ali