【问题标题】:"An access violation (Segmentation Fault) raised in your program."“程序中出现访问冲突(分段错误)。”
【发布时间】:2011-06-02 06:58:43
【问题描述】:

我的 C++ 程序编译并运行,直到我从 main() 调用此函数:

int uword(){fstream infile("numbers.txt");
fstream exfile("wordlist.txt");
string numb[numoflines];
string lines[numoflines];  
number = 1; 
line = 1;  
for(int i=0;i<numofline;++i)
    {
    getline (infile,number);
    numb[i] = number; //I think this is causing the problem
    getline (exfile,line);
    lines[i] = line; //This too
    }
infile.close();
exfile.close();    
string yourword;

这里的某些东西导致它崩溃,在调试中它弹出“程序中引发访问冲突(分段错误)”。

编辑:我的错误是在 for 循环中使用 !infile.eof。

【问题讨论】:

  • 您的输入循环不正确。 GMan 很好地解释了如何正确处理an answer to one of the C++ FAQ questions 中的输入。
  • 将 !infile.eof() 更改为 i
  • 你的意思是 i
  • 是的,这就是我的意思,当我在我的代码中更改它时,它现在可以工作了。 :)

标签: c++ dev-c++


【解决方案1】:

不是一个直接的答案,但我相信这是一个很好的答案......

使用调试器!当发生分段错误时,GDB 应该在确切的行暂停,从而很好地提示您错误是什么。

【讨论】:

    【解决方案2】:

    getline 函数的工作方式并非您认为的那样。

    此外,infile 中的行数可能超过 numoflines

    【讨论】:

    • 您能否详细说明“getline”的正确用法? numoflines 之前是根据文件中有多少行来计算的。
    • @Mark:见man 3 getline。它是为与 C FILE* 句柄一起使用而设计的,而您在此处尝试将它与 fstream 一起使用。您应该使用 infile &gt;&gt; number 来使用 C++ 风格的 ifstream
    • 我正在使用 getline 因为它似乎可以用于此目的。 infile >> number 只会将整个文件写入 number 对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2017-11-05
    • 2019-07-16
    相关资源
    最近更新 更多