c - C中1M元素的结构数组

标签 c

我有下面的代码,它按照我打算处理相对较小的数据的方式工作,比如文本文件中的 10000 行。我需要它来处理 1M 行的文件。它给出了段错误,我不知道如何解决它。你能帮帮我吗?

这在 main 中调用:

playersInfo player[size];

.......更多代码在这里

然后对于程序的这一部分,我有这段代码:(它读取一个文件并将信息放入数组中,然后计算玩家的 mvp 并打印具有最高 mvp 的玩家)

if(choice == 'D')
{
    printf("\n");
    while(i < size && fscanf(myFile, "%d %s %f %f %f %f %f %d %d %d \n", &player[i].id, player[i].name,
                    &player[i].ppg, &player[i].apg, &player[i].rpg, &player[i].spg, &player[i].mpg,
                    &player[i].vote1, &player[i].vote2, &player[i].vote3) != EOF)
    {
        player[i].mvp = 0;
        i++;
    }

    for(i = 0; i < size; i++)
    {
        int current = i;
        if(player[current].vote1 != player[current].id)
        {
            i = findIndex(player, size, player[current].vote1);
            player[i].mvp += 3;
        }

        if((player[current].vote2 != player[current].id) && (player[current].vote2 != player[current].vote1))
        {
            i = findIndex(player, size, player[current].vote2);
            player[i].mvp += 2;
        }
        if((player[current].vote3 != player[current].id) && (player[current].vote3 != player[current].vote1) && (player[current].vote3 != player[current].vote2))
        {
            i = findIndex(player, size, player[current].vote3);
            player[i].mvp += 1;
        }
        i = current;
    }

    qsort((void *) &player, size, sizeof(playersInfo), (compfn)comparePlayersByMVP);
    printf("The MVP is %s (%d), with %d point(s).\n", player[0].name, player[0].id, player[0].mvp);
}

最佳答案

如果您在堆栈中声明数组,那么它可能太大了。考虑使用堆。

playersInfo *player = (playersInfo*) malloc(size * sizeof(playersInfo));

关于c - C中1M元素的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22214100/

相关文章:

从 R 的 C 代码创建共享对象

c - C/阅读中的前瞻

c - 将包含指针的结构写入磁盘

c - 同一函数的不同参数类型

c - 我不明白 fseek 参数的作用

c - 在c中显示以 '*'分隔的正数的质因数

c - 数组成员的值变化不合逻辑

c - 为什么 fflush() 不被认为是安全的?

在 2 个不同版本的 gcc 上编译源代码

linux - 动态进程池