有一个SegFault应该没有

时间:2013-11-11 23:42:27

标签: c++

程序在不应该的情况下继续抛出seg故障。我有数组和向量,并尝试了两种选择。似乎总是把seg故障抛在3的数组/向量的第三个值上。之后还有另外一个函数,当被注释掉时,它会再多出几次。但结果是一样的,它仍然存在缺陷。

    char bits[3];//vector<char> bits(3,'0');
    vector<string> inputs;
    string temp;
    for(int x = 0;!i.eof();x++)
    {
            getline(i, temp);
            inputs.push_back(temp);
    }
    for(int x = 0; x < inputs.size();x++)
    {
       cout << endl << inputs[x];
    }
    for(int x = 0; x < 3;x++)
    {
       cout << endl << bits[x];
    }
    for(int cursor = 0;cursor< inputs.size();cursor++)
    {
    cout << endl << "bitstogoin " << cursor;
    cout << endl << inputs.size();
            bits[0]=inputs[cursor][0];
    cout << endl << "got1 " << bits[0];
            bits[1]=inputs[cursor][1];
    cout << endl << "got2 " << bits[1];
            bits[2]=inputs[cursor][2];  //seg faults on this line.
    cout << endl << "bitsin";
    for(int t = 0; t < 3;t++)
    {
    cout << bits[t];
   }

通过输入文件提供的命令如下所示:     100 10110101     101 11001011     111     110     000     111     110等...

2 个答案:

答案 0 :(得分:1)

注意:这可能与您的段错误无关,但仍应解决。

以下输入循环有两个问题。首先,x毫无意义,因为你永远不会对x的值做任何事情。其次,eof()上的循环很少是正确的(请参阅:Testing stream.good() or !stream.eof() reads last line twice)。

for(int x = 0;!i.eof();x++)
{
    getline(i, temp);
    inputs.push_back(temp);
}

请尝试以下方法:

while (getline(i, temp))
{
    inputs.push_back(temp);
}

答案 1 :(得分:0)

在您的代码中:

 vector<string> inputs;
    string temp;
    for(int x = 0;!i.eof();x++)
    {
            getline(i, temp);
            inputs.push_back(temp);
    }

您读入字符串并将它们放入矢量中。

问问自己这个?每个字符串的长度是多少?

致电时

bits[2]=inputs[cursor][2];

您正在访问该向量中字符串的第3个字符。在此声明之前试试这个:

if (inputs[cursor].size() < 3)
   cout << "String is less than 3!" << endl;

如果您的程序打印出该调试行,那么您就知道自己遇到了麻烦。

事实上,在尝试访问字符串中的字符之前,你并没有真正做任何事情来检查字符串的长度。