Я пытаюсь разработать простой просмотрщик трехмерных моделей, который должен иметь возможность читать файлы по строкам в формате obj. Это казалось очень простым, однако, когда std::getline
попадает eof
, программа выходит с ошибкой сегментации.Ошибка сегментации при чтении файла/ввода с помощью getline
Здесь я сделал наименьшее количество кода, которое дает мне segfault (здесь я использую std::cin
, так что моя программа не заканчивается сразу, но я действительно получаю возможность ввести в нее некоторые вещи, и вручную ввести EOF):
std::string line;
while(std::getline(std::cin, line))
{
std::cout<<line;
}
Другой вещь, чтобы заметить это, что этот код будет производить только Segfault, если строка, содержащая EOF пуста, в противном случае, если ВФ вводится в строке, содержащим что-нибудь еще, петля просто продолжается.
Edit: Теперь я воспроизвели с наименьшим кодом:
main.cpp
#include <iostream>
#include "Model.h"
int main(int argc, char* argv[])
{
std::string path = "/home/thor/Skrivebord/3d_files/Exported.obj";
obj::Model(path.c_str());
return 0;
}
model.h
#ifndef MODEL_H_INCLUDED
#define MODEL_H_INCLUDED
namespace obj
{
class Model
{
public:
Model(const char* path);
};
}
#endif // MODEL_H_INCLUDED
Модель .cpp
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include <string>
namespace obj
{
class Model
{
public:
Model(const char* path);
private:
std::string name = ""; // Remove this line, and all works.
};
Model::Model(const char* path)
{
std::string line;
while(std::getline(std::cin, line))
{
std::cout << line;
}
}
}
Просто сделайте 'while (getline (cin, line))' без условного 'eof()'. – 0x499602D2
Я уже пробовал это, и это все равно дает мне segfault. – Lillesort131
Затем покажите нам свой фактический код. – 0x499602D2