2011-10-26 20 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; 
} 

Este programa es un motivo de falla de segmentación, pero si defino N como 1023, el programa funcionará correctamente. ¿Por qué sucede?Error de segmentación, matrices grandes

+0

De todos modos solo llenas la diagona principal l de la matriz a y b. –

+0

AurelioDeRosa, es solo un ejemplo, en mi programa me encontré con un problema similar. –

Respuesta

27

Estás desbordando la pila. 2 * 1024 * 1024 * sizeof(int) es mucho para la mayoría de los sistemas.

La solución más simple sería hacer las matrices static.

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

Otros métodos:

  • hacer que los arrays globales (esto es esencialmente el mismo que el anterior)
  • Uso malloc en un bucle y, por supuesto, no olvide free

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

gracias, es su ayuda –

+0

@AlexeyMatveev ¡O puede decirle al compilador que le proporcione una pila más grande! Hay una opción para eso! – xanatos

+1

@xanatos: no necesariamente depende del compilador: en muchos entornos, el tamaño de la pila se determina en tiempo de ejecución –

Cuestiones relacionadas