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];
Большое спасибо!
Ваш массив - один символ короткий, нет места для нулевого символа, скопированного 'strcpy'. – user657267
Ok, length() + 1. Но почему это вызывает утечку памяти? сама строка strcpy не вызывает ошибку; это строка удаления, которая ее вызывает. Почему он не может просто удалить все, что находится в arrayOfCharPtr [0], независимо от того, как долго его содержимое? – Johan
«Строка strcpy сама по себе не вызывает ошибки». Добро пожаловать в неопределенное поведение, где все может показаться работающим, но затем взорваться пугающими путями вдали от источника. – user657267