我正在尝试开发一个简单的3d模型查看器,它应该能够逐行读取obj格式的文件。这似乎很简单,但是当std::getline
命中eof
时,程序退出并出现分段错误。使用getline读取文件/输入时的分段错误
在这里,我做了最小的代码,它给了我一个段错误(我在这里使用了std::cin
,这样我的程序不会立即结束,但我实际上有机会输入一些东西进去,手动输入EOF):
std::string line;
while(std::getline(std::cin, line))
{
std::cout<<line;
}
另一件事要注意的是,此代码只会产生一个segfault如果包含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;
}
}
}
只要'while(getline(cin,line))''没有条件'eof()'。 – 0x499602D2
我已经试过了,它仍然给我一个段错误。 – Lillesort131
然后向我们展示您的实际代码。 – 0x499602D2