2011-10-26 18 views
15
#include <stdio.h> 
#define N 1024 
int main(){ 
    int i, j; 
    int a[N][N]; 
    int b[N][N]; 
    for (i=0;i<N;i++){ 
    a[i][i]=i; 
    b[i][i]=i; 
    } 
    for (i=0;i<N;i++) 
    for(j=0;j<N;j++) 
    { 
     printf("%d", a[i][j]); 
     printf("%d", b[i][j]); 
    } 
    return 0; 
} 

Questo programma è un motivo di errore di segmentazione, ma se definisco N come 1023, il programma funzionerà correttamente. Perché succede?Segmentation Fault, array di grandi dimensioni

+0

In ogni caso si riempie solo la diagonale principale l della matrice aeb. –

+0

AurelioDeRosa, è solo un esempio, nel mio programma ho riscontrato problemi simili. –

risposta

27

Si sta traboccando lo stack. 2 * 1024 * 1024 * sizeof(int) è molto per la maggior parte dei sistemi.

La soluzione più semplice sarebbe quella di rendere gli array static.

static int a[N][N]; 
static int b[N][N]; 

Altri metodi:

  • rendere l'array globali (Questo è essenzialmente lo stesso come sopra)
  • Usa malloc in un ciclo e, naturalmente, ricordate di free

    int **a = malloc(N * sizeof *a); 
    for (i = 0; i < N; i++) 
        a[i] = malloc(N * sizeof *a[i]); 
    
+0

grazie, il suo aiuto –

+0

@AlexeyMatveev O puoi dire al compilatore di darti uno stack più grande! C'è un'opzione per questo! – xanatos

+1

@xanatos: non dipende necessariamente dal compilatore - in molti ambienti la dimensione dello stack è determinata in fase di esecuzione –

Problemi correlati