为什么会出现细分错误

时间:2020-02-06 04:50:01

标签: c++

我有代码,我在文件中搜索,将每一行分配给一个数组,然后根据每个组要多少人来随机输出组。 例如:如果用户每组输入2个人,并且列表中有50个人,那么将有25组2人。

沿线某处存在分段错误,但我不知道它在哪里或什么。

using namespace std;
int peoplePerGroup;
int count = 0;
int groupNum;
void group();
string names[50];
int main() {
    cout << "How many people do you want per group: ";
    cin >> peoplePerGroup;
    string line;
    ifstream myfile("names.txt", ios::in);
    if (myfile.is_open()) {
        int i = 0;
        while (getline(myfile, line)) {
            if (i < 50) {
                names[i] = line;
                i++;
            } else
                continue;
        }
        myfile.close();
    }
    group();


    return 0;
}
void group() {
    int i, j = 0;
    while (j < 50) {
        srand(time(NULL));
        int random[50];
        int k;
        random[k] = rand() % 50;
        groupNum = 1;
        if (peoplePerGroup < i) {
            groupNum++;
            i = 0;
            cout << "Group " << groupNum << " has: ";
            cout << names[random[k]] << " ";
            names[random[k]] = "done";
            j++, i++;
        }
        if (peoplePerGroup >= i) {
            if (names[random[k]] != "done") {
                cout << " " << names[random[k]] << " ";
                names[random[k]] = "done";
                j++, i++;
            }
        }
        k++;
    }
}

1 个答案:

答案 0 :(得分:0)

正如评论中已经指出的那样。 ik未初始化。因此,不能保证它们将为0,这是您在代码中期望的。它们可以是int可以的任何东西。

如果需要,您可以添加

std::cout << k << " " << i << std::endl;

int k之后,看看自己。

如果我运行它,我的ik大约在32000左右。

random[k] = rand() % 50

它崩溃了。将来,如果您遇到类似的问题,可能要使用调试器,然后启动程序,如果程序崩溃了,您将确切地看到崩溃的位置,并查看当前作用域内所有可用变量的值。