C ++ char *到字符串运行时错误

时间:2014-06-05 11:35:24

标签: c++ string file char malloc

我有这段代码:

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存储的内容及其:

  

“#Upl / manpoly /Desktop/Yusup/Models/Land/Lamborghini/Aventador/Aventador/Avent.obj撰写的#MTL”

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

  

mtlFile.getline(mtlBuffer,255);

代码完美无缺。为什么getLine会使程序失败?

抱歉我的英文。

2 个答案:

答案 0 :(得分:1)

该行

mtlFile.getline(mtlBuffer, 255);

看起来好像需要指向预先分配的字节缓冲区的指针。并且&#34; 255&#34;可以指定该缓冲区的大小。 但我看不到你的代码中有任何分配。 所以我会说&#34; getline&#34;试图写入未分配的空间。

答案 1 :(得分:0)

此代码是问题所在。

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

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

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

mtlBuffer是某个内部缓冲区的指针,显然不适合重用。作为一般原则,任何时候为某种不同目的重复使用变量时,迟早会遇到某种问题。