我有这段代码:

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触发了一个断点。


这发生在malloc文件上。我已经破解了mtlBuffer存储的内容及其内容:


  “#MTL,来自/Users/manapoly/Desktop/Yusup/Models/Land/Lamborghini/Aventador/Aventador/Avent.obj编写”


这是怪异的,如果我删除此行(并将mtlBufferStr与他需要包含的值进行比较):


  mtlFile.getline(mtlBuffer,255);


该代码完美地工作。为什么getLine会使程序失败?

对不起,我的英语。

最佳答案

这段代码就是问题所在。

mtlFile.getline(mtlBuffer, 255);
mtlBufferStr = mtlBuffer;


您需要读入本地分配的缓冲区。例如:

char buf[255];
mtlFile.getline(buf, 255);
mtlBufferStr = buf;


mtlBuffer是指向某处内部缓冲区的指针,显然不适合重用。作为一般原则,任何时候出于某些不同目的重用变量时,迟早都会出现某种问题。

07-28 13:57