数组的最大大小 - 分段错误

时间:2017-05-02 12:06:10

标签: c memory memory-leaks segmentation-fault malloc

我的代码遇到了一些问题:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void union1(int belongs[],int c1,int c2, int n);

int main()
{
int i=0;
    int j=0;
    int N, num_AERO, num_E;
    if (scanf("%d", &N) != 1) { exit(1); }
    if (scanf("%d", &num_AERO) != 1) { exit(1); }
    int custoAERO[num_AERO];
    for (i = 0; i < num_AERO; i++) 
    {
        int id_aero, cst_aero;
        if (scanf("%d %d", &id_aero, &cst_aero) != 2) { exit(1); }
        custoAERO[i] = cst_aero;
    }
    if (scanf("%d", &num_E) != 1) { exit(1); }
    int *matriz_estradas[N];
    for (i = 0; i < N; i++) 
    {
        matriz_estradas[i] = malloc(sizeof(*matriz_estradas[i]));
    }

    int cid_a, cid_b, cust;
    for(i=0; i< num_E; i++)
    {
        if (scanf("%d %d %d", &cid_a, &cid_b, &cust) != 3) { exit(1); }
        matriz_estradas[cid_a -1][cid_b -1] = cust;
        matriz_estradas[cid_b -1][cid_a -1] = cust;
    }
    for(i=0; i<N; i++)
    {
        int cidade_sozinha = 0;
        for(j=0; j<N; j++)
        {

            if(matriz_estradas[i][j]>0 || matriz_estradas[j][i]>0)
                cidade_sozinha = 1;
        }
        if(cidade_sozinha==0)
        {
            if((sizeof(custoAERO)/sizeof(int))<i+1)
            {
                printf("Insuficiente\n");
                return EXIT_SUCCESS;
            }
        }
    }

代码工作正常,但是当N的值太高时,我在分配

时会出现分段错误错误
    for (i = 0; i < N; i++) 
    {
        matriz_estradas[i] = malloc(sizeof(*matriz_estradas[i]));
    }

我可以在数组中分配最大内存吗?

2 个答案:

答案 0 :(得分:1)

您需要更正此声明

matriz_estradas[i] = malloc(sizeof(*matriz_estradas[i]));

matriz_estradas [i]尚未分配内存,* matriz_estradas [i]尝试从未分配的内存中访问值

答案 1 :(得分:0)

Is there a max array length limit in C++? 你可以在这里阅读有关内存分配以及代码无法处理的原因,如果N是一个很高的数字