0
누군가이 코드가 힙 손상을 초래하는 이유를 설명 할 수 있습니까?포인터를 삭제하면 힙이 손상됩니다.
string someText = "hello hello";
char **arrayOfCharPtr = new char*[5];
arrayOfCharPtr[0] = new char[someText.length()];
strcpy(arrayOfCharPtr[0], someText.c_str());
delete[] arrayOfCharPtr[0];
감사합니다.
배열의 길이가 1 문자이므로 'strcpy'에 의해 복사 된 널 문자를위한 공간이 없습니다. – user657267
좋습니다, length() + 1.하지만 왜 메모리 누수가 발생합니까? strcpy 행 자체는 오류를 일으키지 않습니다. 그것을 일으키는 것은 delete-line이다. arrayOfCharPtr [0]에있는 내용의 길이에 관계없이 내용을 삭제할 수없는 이유는 무엇입니까? – Johan
"strcpy 행 자체가 오류를 발생시키지 않습니다."정의되지 않은 동작에 오신 것을 환영합니다. 여기서 일들이 작동하는 것처럼 보일 수 있지만 소스에서 멀리 떨어진 곳에서는 어리석은 방법으로 폭발합니다. – user657267