c++ char*转字符串运行时错误
C++ char* to string run time error
我有这段代码:
char* mtlBuffer = readFromBinary(myfile[0]);
string mtlBufferStr = mtlBuffer;
if (mtlBufferStr != " ")
{
mtlFile.open(fileLocation + "/" + mtlBufferStr.substr(7));
if (mtlFile.is_open())
{
mtlFile.seekg(0, ios::end);
mtlLength = mtlFile.tellg();
mtlFile.seekg(0, ios::beg);
while (mtlFile.tellg() < mtlLength)
{
mtlFile.getline(mtlBuffer, 255);
mtlBufferStr = mtlBuffer;
}
}
}
on line:
mtlBufferStr = mtlBuffer;
我得到一个运行时错误:
Win32.exe触发断点。
这发生在malloc文件上。我已经检查了mtlBuffer存储的内容及其:
"# MTL写自/Users/manapoly/Desktop/Yusup/Models/Land/Lamborghini/Aventador/Aventador/Avent.obj"
奇怪的是,如果我删除这一行(并比较mtlBufferStr和他需要包含的值):
mtlFile。getline (mtlBuffer, 255)、
代码完美工作。为什么getLine程序失败?
抱歉我的英语不好
mtlFile.getline(mtlBuffer, 255);
看起来像是需要一个指向预分配字节缓冲区的指针。"255"可以指定缓冲区的大小。但是我在你的代码中看不到任何分配。所以我会说"getline"尝试写入非分配空间
这段代码就是问题所在。
mtlFile.getline(mtlBuffer, 255);
mtlBufferStr = mtlBuffer;
需要读入本地分配的缓冲区。例如:
char buf[255];
mtlFile.getline(buf, 255);
mtlBufferStr = buf;
mtlBuffer
是指向某个内部缓冲区的指针,显然不适合重用。作为一般原则,任何时候为了不同的目的重用一个变量,都要预料到迟早会出现某种问题。
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- 如何修复我的字符串以避免运行时错误?
- 字符串::插入产生运行时错误
- 为什么此代码使用带有字符串(C )的MAP具有运行时错误
- C++:将字符串流转换为 char* 运行时错误
- 在VC2010中使用Char数组显示字符串时发生运行时错误
- 使用字符串向量初始值设定项时,我收到运行时错误"terminate called after throwing instance of `std::length_error`"
- 为每个使用内部字符串时运行时错误
- 反向字符串脚本给出运行时错误
- C++ 中的运行时错误字符串声明
- 字符串程序C++运行时错误
- 打印字符串时出现运行时错误,即使它在函数中运行良好
- 函数从字符串转换为int时出现运行时错误
- 使用 cout 打印字符串时C++代码块中的运行时错误<<
- 当使用字符串时,c++程序给出一个运行时错误
- c++ char*转字符串运行时错误
- c++运行时错误中的字符串
- 运行时错误反转字符串