Опитвам се да разработя прост преглед на 3d модели, който трябва да може да чете файлове ред по ред във формат obj. Това изглеждаше много просто, но когато std::getline
удари eof
, програмата излиза с грешка в сегментирането.
Тук направих най-малкото количество код, което ми дава segfault (използвам 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;
}
Модел.h
#ifndef MODEL_H_INCLUDED
#define MODEL_H_INCLUDED
namespace obj
{
class Model
{
public:
Model(const char* path);
};
}
#endif // MODEL_H_INCLUDED
Model.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()
. - person 0x499602D2   schedule 24.11.2013std::string name = ""
е законен само в C++11. Тествах го без= ""
и не се срина за мен (не е изненада). - person john   schedule 24.11.2013= ""
и все още дава segfault. - person   schedule 24.11.2013