Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;char*到字符串运行时错误_C++_String_File_Char_Malloc - Fatal编程技术网

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

C++ C++;char*到字符串运行时错误,c++,string,file,char,malloc,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:

我有一段代码:

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;
        }
    }
}
我遇到一个运行时错误:

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
是指向某个内部缓冲区的指针,显然不适合重用。作为一般原则,任何时候为了不同的目的重用变量都可能会出现某种问题。

原因很可能是您从
char*mtlBuffer=readFromBinary(myfile[0])得到的结果未正确终止NUL(
'\0'
)!稍微偏离主题:为什么不使用
std::string::assign()
而不是
operator=
?@IosifMurariu可能是出于可读性的原因。为什么还要使用
char*mtlBuffer
?为什么不直接分配给
std::string
?您以后也应该能够使用
std::string
getline
readFromBinary()
返回什么?你能写吗?它是否足够大,可以容纳255个字符?代码的这一部分看起来很不稳定。
char buf[255];
mtlFile.getline(buf, 255);
mtlBufferStr = buf;