我有这段代码:
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;
}
}
}
在线:
mtlBufferStr = mtlBuffer;
我遇到一个运行时错误:
Win32.exe has triggered a breakpoint.
这发生在 malloc 文件上。我检查了 mtlBuffer 存储的内容及其:
"# MTL written from /Users/manapoly/Desktop/Yusup/Models/Land/Lamborghini/Aventador/Aventador/Avent.obj"
奇怪的是,如果我删除这一行(并将 mtlBufferStr 与他需要包含的值进行比较):
mtlFile.getline(mtlBuffer, 255);
代码完美运行。为什么 getLine 会使程序失败?
抱歉我的英语不好。
最佳答案
线
mtlFile.getline(mtlBuffer, 255);
看起来它需要一个指向预分配字节缓冲区的指针。 “255”可能指定该缓冲区的大小。 但是我看不到您的代码中进行了任何分配。 所以我会说“getline”试图写入未分配的空间。
关于C++ char* 到字符串运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24059159/