首页 > 解决方案 > 为什么我的程序在定义两个大数组时会崩溃?

问题描述

我目前有以下代码:

#define ARRAY_SIZE 1000000
#define CHILDS 2

typedef struct
{
    char a[20];
    int b;
} shared_data_type;

int main()
{
    int i;

    // I need 2 arrays and 1 variable of this type
    shared_data_type v1[ARRAY_SIZE], v2[ARRAY_SIZE], aux;

    srand((unsigned)time(NULL));
    for (i = 0; i < ARRAY_SIZE; i++)
    {
        strcpy(v1[i].a, "RANDOM STRING");
        v1[i].b = rand() % 50;
    }

    return 0;
}

但是如果我用这行代码运行程序:shared_data_type v1[ARRAY_SIZE], v2[ARRAY_SIZE], aux;我在输出中得到这个错误:make: *** [run] Segmentation fault (core dumped)

我究竟做错了什么?

标签: c

解决方案


尝试在系统内存中分配数组而不是进程的堆栈:

#define ARRAY_SIZE 1000000
#define CHILDS 2

typedef struct
{
    char a[20];
    int b;
} shared_data_type;

int main()
{
    int i;

    // I need 2 arrays and 1 variable of this type
    shared_data_type * v1, * v2, aux;

    v1 = malloc(ARRAY_SIZE * sizeof(*v1);
    v2 = malloc(ARRAY_SIZE * sizeof(*v2);

    srand((unsigned)time(NULL));
    for (i = 0; i < ARRAY_SIZE; i++)
    {
        strcpy(v1[i].a, "RANDOM STRING");
        v1[i].b = rand() % 50;
    }

    return 0;
}

推荐阅读