私は私のコードでいくつかの問題が生じています:最大サイズ - セグメンテーションフォールト
#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の値が高すぎると、私はときのallocセグメンテーションフォールトエラーが表示されます'in in
for (i = 0; i < N; i++)
{
matriz_estradas[i] = malloc(sizeof(*matriz_estradas[i]));
}
アレイに割り当てることができる最大のメモリはありますか?あなたはここでメモリの割り当てについて読むことができ、Nはあなたが[i]がhasn
matriz_estradas[i] = malloc(sizeof(*matriz_estradas[i]));
matriz_estradasこの文を修正する必要があり、高い数
'N'の大きさはどれくらいですか? 'int * matriz_estradas [N];'はスタック上に(ポインタのための)スペースを割り当てているので、スタックオーバーフローではないと確信していますか? – Groo
@GrooがN> 100000の場合、スタックオーバーフローが発生する可能性があります。 –
宣言を関数の外に移動するか、配列を 'malloc'するだけです。 – Groo