У меня есть этот код:
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
- это указатель на внутренний буфер где-то и, очевидно, не подходит для повторного использования. Как общий принцип, каждый раз, когда вы повторно используете переменную для какой-то другой цели, рано или поздно ожидайте какую-то проблему.
Линия
mtlFile.getline(mtlBuffer, 255);
похоже, что он ожидает указатель на предварительно выделенный буфер байта. И "255" может указать размер этого буфера. Но я не вижу никакого выделения в коде. Поэтому я бы сказал, что "getline" пытается записать в нераспределенное пространство.
char* mtlBuffer = readFromBinary(myfile[0]);
неправильно NUL ('\0'
) завершено!std::string::assign()
вместоoperator=
?