为什么我在运行程序时遇到错误“分段错误”?

时间:2013-11-05 23:47:25

标签: c++ for-loop segmentation-fault istringstream

我试图读取文件(input.txt)并逐字逐句地存储并仅存储向量(名称)中的单词。这是一个更大的项目的一部分,但我被困在这里。程序编译然后当我去运行它我得到错误“分段错误”。我查看了我的程序,找不到错误。我相信它是在我的for循环中,我如何措辞,但不知道如何更改它,使程序运行正常。如果你可以给我一些关于如何改变它的建议,甚至告诉我什么是错的,所以我知道从哪里开始这将是伟大的!谢谢!

#include<iostream>
#include<string>
#include<vector>
#include<fstream>
#include<sstream>

using namespace std;



int main()
{
    ifstream inf;
    inf.open("input.txt");//open file for reading
    string s;
    getline(inf, s);
    string word;
    vector<int> index;// for later in my project ignore
    vector<string> name;// store the words from the input file
    while( !inf.eof())//while in the file
    {
            istringstream instr(s);//go line by line and read through the string
            string word;
            instr >> word;

            for(int i=0;i<word.length(); i++) //go word by word in string checkin if word and if it is then parseing it to the vector name
               {
                    if(!isalpha(word[i]))
                           name.push_back(word);

                cout<<name[i]<<endl;
            }
    }
    inf.close();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您正在使用您用于迭代name字符串的循环变量为word向量编制索引。由于您在那里有if语句,因此完全有可能永远不会调用name.push_back(word);,并且您错误地将其编入name索引。

for(int i=0;i<word.length(); i++)
{
    // If this fails, nothing is pushed into name
    if(!isalpha(word[i]))
        name.push_back(word);

    // But you're still indexing into name with i.
    cout<<name[i]<<endl;
}

只需从循环中打印单词,无需索引矢量。

for(int i=0;i<word.length(); i++)
{
    if(!isalpha(word[i]))
    {
        name.push_back(word);
        cout << "Found word: " << word << endl;
    }
}