为什么在正常情况下使用std :: ifstream会给我一个分段错误?

时间:2016-03-24 04:59:15

标签: c++ ubuntu

对不起,如果我问的任何事情是显而易见的或是愚蠢的,我大约需要两周时间学习C ++。

编辑:我发现了问题,就是在文件的输出中,所有空格都更改为不同的字符。有人可以关闭这个问题吗?

我一直在努力编写一个收集有关假设员工数据的程序。最近,我试图让它从文件中读取 - 但是,每次我运行下面的代码(运行auto-complete-mode)时,我都会遇到分段错误。使用断点,我将其缩小到lisp-interaction-mode-hook。我测试了它并对其进行了测试,并且已经发现fix();变量不是问题 - 即使我使用字符串文字,它仍会引发错误。我发现的其他事情:

- 隔离std::ifstream file(filename)并将其放入另一个文件中,它无法引用任何此文件的变量。

- 当我输入存在的文件的名称时,会发生 NOT 分段错误 - 相反,它会到达断点0(就像它应该的那样),打印filename(就像它应该),并返回false(就像它应该)。

有谁知道为什么会发生这种情况以及如何解决这个问题?这困扰了我好几天。

(另外,我使用Ubuntu 14.04和G ++ 4.8 - 启动标志-std = c ++ 1y)

编辑好的,这变得非常奇怪。我做的第一件事是使用std::ifstream file(filename)每隔一行调试我的程序。这将问题精确定位到Error in opening file.。但是,根据@ M.M和@hyde的推荐,我通过Code :: Blocks调试器运行我的程序。它告诉我,分段错误发生在std::cout。所以我评论了这一行 - 但是调试器仍然说这行是问题所在!它说这个问题是 评论出来 !我比以前更困惑。

std::ifstream

1 个答案:

答案 0 :(得分:0)

这可能无法解决您的问题,但......

使用

while ( file )
{
   ...
   std::getline(file, lineInput);
   ...
}

是个问题。请参阅Why is iostream::eof inside a loop condition considered wrong?

使用

while ( file ) { }

遇到与使用相同的问题:

while ( !file.eof() ) { }

更改要使用的代码:

// Move the declaration of lineInput out of the loop.
std::string lineInput;
while ( std::getline(file, lineInput) )
{
   ...
}