Вот мой код:
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-строку) с длиной строки
Третья строка считывает строку (считывает ее из файла)
В 4-й строке в конец добавляется NULL.
Пятая строка создает std :: string из c-строки.
6-я строка удаляет c-строку (ПРОИСХОДИТ КУЧА ИСПРАВЛЕНИЕ ЗДЕСЬ)
7-я строка возвращает строку, но никогда не достигает этой точки из-за ошибки.
В 6-й строке я получаю ошибку повреждения кучи: CRT обнаружила, что приложение записало в память после завершения буфера кучи.
Мой вопрос может быть очевиден, но почему я получаю повреждение кучи? Когда я создаю std :: string, он должен копировать строку, и я могу безопасно удалить c-строку.
В настоящее время я подозреваю, что std :: string пытается получить доступ к c-строке после ее удаления.
Любые идеи?
delete[]
в вашем коде, поэтому ваш код плохой. Используйтеstd::vector
или что-то в этом роде, или даже просто прочитайте строку напрямую. - person GManNickG   schedule 19.11.2010