1

程序在不应该出现的情况下不断抛出段错误。我有数组和向量,并尝试了这两种选择。似乎总是在数组/向量的第三个值 3 上抛出 seg 错误。在此之后还有另一个函数,当被注释掉时,它会再运行几次。但是结果是一样的,还是seg故障。

    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 等...

4

2 回答 2

1

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

下面的输入循环有两个问题。首先,x是没有意义的,因为你从不使用 的值做任何事情x。其次,循环eof()很少是正确的(请参阅:测试 stream.good() 或 !stream.eof() 读取最后一行两次)。

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

请尝试以下操作:

while (getline(i, temp))
{
    inputs.push_back(temp);
}
于 2013-11-11T23:57:55.123 回答
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];

您正在访问该向量中字符串的第三个字符。在此声明之前尝试以下操作:

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

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

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

于 2013-11-11T23:48:39.100 回答