C++ 有一个应该没有的断层

C++ 有一个应该没有的断层,c++,C++,程序在不应该抛出seg错误的情况下不断抛出seg错误。我有数组和向量,并尝试了这两种选择。似乎总是在数组/向量3的第三个值上抛出seg故障。在这之后还有另外一个函数,当注释掉时,它会再运行几次。但结果是一样的,它仍然存在seg故障 char bits[3];//vector<char> bits(3,'0'); vector<string> inputs; string temp; for(int x = 0;!i.eof();x++)

程序在不应该抛出seg错误的情况下不断抛出seg错误。我有数组和向量,并尝试了这两种选择。似乎总是在数组/向量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];
   }
char位[3]//向量位(3,'0');
矢量输入;
字符串温度;
对于(int x=0;!i.eof();x++)
{
getline(i,temp);
输入。推回(温度);
}
对于(int x=0;x
 vector<string> inputs;
    string temp;
    for(int x = 0;!i.eof();x++)
    {
            getline(i, temp);
            inputs.push_back(temp);
    }
您正在访问该向量中字符串的第3个字符。在此语句之前,请尝试以下操作:

if (inputs[cursor].size() < 3)
   cout << "String is less than 3!" << endl;
if(输入[cursor].size()<3)
cout在您的代码中:

 vector<string> inputs;
    string temp;
    for(int x = 0;!i.eof();x++)
    {
            getline(i, temp);
            inputs.push_back(temp);
    }
您正在访问该向量中字符串的第3个字符。在此语句之前,请尝试以下操作:

if (inputs[cursor].size() < 3)
   cout << "String is less than 3!" << endl;
if(输入[cursor].size()<3)
cout注意:这可能与您的故障无关,但仍应予以解决

下面的输入循环有两个问题。首先,
x
是毫无意义的,因为您从未使用
x
的值执行任何操作。其次,在
eof()
上循环很少是正确的(请参阅:)

请尝试以下操作:

while (getline(i, temp))
{
    inputs.push_back(temp);
}
注意:这可能与您的SEGFULT无关,但仍应予以解决

下面的输入循环有两个问题。首先,
x
是毫无意义的,因为您从未使用
x
的值执行任何操作。其次,在
eof()
上循环很少是正确的(请参阅:)

请尝试以下操作:

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

如何保证输入中的每个字符串的长度至少为3?如果读取长度为2的字符串,则
inputs[cursor][2]
将超出范围。我正在读取的命令代码是由三个二进制位组成的一组,因此是标题。之后它基本上进入3x8解码器。输入看起来像:100 110 101 111 1101001 101 1001等。我的生活故事(以及许多其他).您如何保证输入中的每个字符串的长度至少为3?如果您读取长度为2的字符串,则
inputs[cursor][2]
将超出范围。我正在读取的命令代码是由三个二进制位组成的一组,因此是标题。之后它基本上进入3x8解码器。输入看起来像:100 110 101 111 1101001 101 1001等。我的生活故事(以及许多其他)。在代码运行位放置之前,我将该位插入到代码中,但在它出现seg故障之前,它没有给出该打印。@user2981171是否有调试器?能否在seg故障点之前放置一个断点,并确保所有数据都正常?我尝试使用Visual Studio,但由于某些原因,我在运行该代码时总是遇到问题通过visual studio接收文件。我还没来得及了解程序的实质内容,它就已经有了一个习惯。@Serathano:如果是这样,我建议做几件事:在设置位之前打印出所有字符串的大小,如果你有一个大数字,这可能会很麻烦,或者修改输入以从终端读取,然后更改它当您验证文件是否有效时读取文件。最后,您可以尝试获取一些帮助(在线或朋友的帮助)让你的调试器工作。我真的觉得你有一个糟糕的数据问题。我在代码运行放置位之前将该位插入到代码中,在它出现seg故障之前,它没有给出该打印。@user2981171你有调试器吗?你能在seg故障点之前放置一个断点并确保所有数据都是好的吗?我尝试了using Visual Studio,但由于某些原因,我在运行通过Visual Studio接收文件的代码时总是遇到问题。我甚至还没来得及开始编写程序之前就已经习惯了。@Serathano:如果是这样的话,我建议做几件事:在设置位之前打印出所有字符串的大小,这可能会很麻烦大量输入,或者,修改您的输入以从终端读取,然后在验证其工作正常后将其更改为从文件读取。最后,您可以尝试获得一些帮助(联机或朋友的帮助)让你的调试器工作。我真的觉得你遇到了一个糟糕的数据问题。这是我没有想到的。我想for外观只是习惯,因为这个特定的程序还有大约15个for循环。我想我自己也陷入了一个循环写循环。这是我没有想到的。for外观我想也是习惯s的特定程序还有大约15个for循环。我想我自己也被困在了一个循环编写循环中。