obj 형식의 파일을 한 줄씩 읽을 수있는 간단한 3D 모델 뷰어를 개발하려고합니다. 이것은 매우 단순한 것처럼 보이지만, 이 eof
에 도달하면 프로그램은 세그먼트 오류로 종료됩니다.getline을 사용하여 파일/입력을 읽는 중 세그먼트 오류가 발생했습니다.
여기서는 segfault를 제공하는 코드를 가장 적게 만들었습니다 (여기서는 std::cin
을 사용했기 때문에 프로그램이 즉시 끝나지는 않지만 실제로 몇 가지 내용을 입력 할 수있는 기회를 얻었습니다. 수동)는 EOF를 입력 :
std::string line;
while(std::getline(std::cin, line))
{
std::cout<<line;
}
또 다른 일을 예고하는, EOF를 포함하는 행이 비어있는 경우이 코드는 세그먼트 폴트를 생산하는 것, 그렇지 않으면 EOF 다른 작업을 포함하는 줄에 입력하면, 루프 단순히 계속됩니다.
편집 : 지금, 나는 가능한 한 가장 작은 코드로이 재현했습니다
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;
}
}
}
조건부'eof()'없이'while (getline (cin, line))'을 수행하십시오. – 0x499602D2
나는 그것을 이미 시도해 봤는데, 여전히 나에게 segfault를 준다. – Lillesort131
실제 코드를 보여주십시오. – 0x499602D2