在C++中使用数组时出现段错误

Getting a segfault working with arrays in C++

本文关键字:段错误 错误 C++ 数组      更新时间:2023-10-16

我在一个入门C++课上,所以我对此完全陌生,但我似乎在运行时遇到以下代码的段错误(剥离到我认为问题所在):

int main(int argc, char *argv[])
{
string filename;
ifstream infile;
float average;
int const ARRAY_SIZE = 20;
int count = 0;
string responses[ARRAY_SIZE];
string response;
char grade;
welcome();
splash();
cout << showpoint << setprecision(1) << fixed;
cout << "nnnnnnnnnnn"
     << "ttEnter 8-Ball response file name: ";
cin  >> filename;
infile.open(filename.c_str());
system("CLS");
        cout << "score";
cout << "nnnn";
if (infile)
    {
        while (!infile.eof())
        {
            infile >> response;
            if (1==1)
            {
                responses[count] = response;
                count ++;
            }
        }
            infile.close();
    }
cout << "nnn";
system("PAUSE");
return 0;
}

那里有一些额外的行、变量等,只是因为它是从各种旧程序中拼凑出来的,我没有包含函数,因为这不是问题所在。基本上,每当我输入文件名时,都会出现段错误。它打印"score",所以在那之后,我尝试去掉 if 部分,但它仍然让我感到悲伤,所以看起来问题出在 while 语句中的代码上。我们没有详细讨论过段错误,所以我什至不知道从哪里开始搜索这个问题。

你硬编码了数组大小,它是否有可能超过这个限制?

因此,如果您的响应可以动态增长,请按如下方式声明一个向量

#include<vector> std::vector<std::string> responses;

并按如下方式更正您的循环:

   while (infile >> response;)
    {         
         responses.emplace_back(response);
         count ++;       
    }
     infile.close();