C ++ char * to string run time error

0

У меня есть этот код:

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 не запускает программу?

Извините за мой английский.

  • 1
    Скорее всего, причина в том, что вы получили из char* mtlBuffer = readFromBinary(myfile[0]); неправильно NUL ( '\0' ) завершено!
  • 0
    немного оффтоп: почему бы не использовать std::string::assign() вместо operator= ?
Показать ещё 7 комментариев
Теги:
string
file
malloc
char

2 ответа

0
Лучший ответ

Этот код является проблемой.

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

Вам нужно прочитать локально выделенный буфер. Например:

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

mtlBuffer - это указатель на внутренний буфер где-то и, очевидно, не подходит для повторного использования. Как общий принцип, каждый раз, когда вы повторно используете переменную для какой-то другой цели, рано или поздно ожидайте какую-то проблему.

1

Линия

mtlFile.getline(mtlBuffer, 255);

похоже, что он ожидает указатель на предварительно выделенный буфер байта. И "255" может указать размер этого буфера. Но я не вижу никакого выделения в коде. Поэтому я бы сказал, что "getline" пытается записать в нераспределенное пространство.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню