Bra*_*rad 2 c++ string heap stl cstring
这是我的代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
第一行读取字符串的长度.
第二行创建一个具有字符串长度
的新char数组(c-string)第三行读取字符串(从文件中读取它)
第4行在末尾添加NULL.
第5行从c-string中创建一个std :: string.
第6行删除了c-string(HEAP CORRUPTION HAPPENS HERE)
第7行返回字符串,但由于出错,它永远不会到达这一点.
在第6行,我遇到堆损坏错误:CRT检测到应用程序在堆缓冲区结束后写入内存.
我的问题可能很明显,但为什么我会出现堆腐败?当我创建一个std :: string时,它应该复制字符串,我应该可以安全地删除c-string.
目前,我怀疑std :: string在我删除它后试图访问c-string.
有任何想法吗?
您正在访问字符串的保留字节.你保留了strLen角色,但是放了一个\0角色strLen.从0开始计数为C数组,字符strLen位于位置strLen + 1,因此您在字符串的保留空间之外放置一个值.您应该strLen + 1在您的第二行保留main您的代码才能工作.
| 归档时间: |
|
| 查看次数: |
2663 次 |
| 最近记录: |