Вот мой код:Повреждение кучи при удалении строки
std::string readString()
{
int strLen = Read<int>();
char* rawString = new char[strLen];
Read(rawString, strLen);
rawString[strLen] = '\0';
std::string retVal(rawString);
delete [] rawString;
return retVal;
}
Первая строка считывает длину строки.
Вторая строка создает новый массив символов (c-string) с длиной строки
Третья строка читает строку (ее чтение из файла)
4-я строка добавляет NULL в конец.
5-я строка создает строку std :: из c-строки.
6-я строка удаляет c-строку (HEAP CORRUPTION HAPPENS HERE)
7-я строка возвращает строку, но она никогда не достигает этой точки из-за ошибки.
На 6-й строке я получаю сообщение об ошибке кучи: ЭЛТ обнаружил, что приложение записано в память после окончания кучного буфера.
Мой вопрос может быть очевиден, но почему я получаю кучу коррупции? Когда я создаю std :: string, он должен скопировать строку, и я должен быть в безопасности, чтобы удалить c-строку.
В настоящее время я подозреваю, что std :: string пытается получить доступ к c-строке после ее удаления.
Любые идеи?
У вас есть 'delete []' в вашем коде, поэтому ваш код плохой. Используйте 'std :: vector' или что-то, или просто просто прочитайте строку напрямую. – GManNickG
@GMan: Даже не видел ваш комментарий, прежде чем я опубликовал: p Невероятно, как это упрощает код тоже ... –