这是我的代码:
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)
第三行读取字符串(从文件中读取)
第四行在末尾添加一个 NULL。
第 5 行从 c 字符串中创建了一个 std::string。
第 6 行删除了 c-string (HEAP CORRUPTION HAPPENS HERE)
第 7 行返回了字符串,但由于出错,它从未到达这一点。
在第 6 行,我收到一个堆损坏错误:CRT 检测到应用程序在堆缓冲区结束后写入内存。
我的问题可能很明显,但为什么我会出现堆损坏?当我创建一个 std::string 时,它应该复制字符串,并且我应该可以安全地删除 c 字符串。
目前,我怀疑 std::string 在我删除它后试图访问它。
有任何想法吗?