【发布时间】:2011-05-12 07:11:26
【问题描述】:
这是我的代码:
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 行从 c 字符串中创建了一个 std::string。
第 6 行删除 c 字符串 (HEAP CORRUPTION HAPPENS HERE)
第 7 行返回字符串,但由于出错,它从未到达这一点。
在第 6 行出现堆损坏错误: CRT 检测到应用程序在堆缓冲区结束后写入内存。
我的问题可能很明显,但为什么会出现堆损坏?当我创建一个 std::string 时,它应该复制字符串,并且我应该可以安全地删除 c-string。
目前,我怀疑 std::string 在我删除它后试图访问它。
有什么想法吗?
【问题讨论】:
-
您的代码中有
delete[],因此您的代码很糟糕。使用std::vector之类的,甚至直接读入字符串。 -
@GMan:在我发布之前甚至没有看到您的评论:p 它还如何简化代码真是令人难以置信......
标签: c++ string stl c-strings heap-corruption