Qué causa la falla de segmentación en el siguiente progtwig

Si mantengo el valor de las filas a 100000, el progtwig funciona bien, pero si hago filas de un millón como 1000000, el progtwig me da una falla de segmentación. ¿Cual es la razon? Estoy corriendo abajo en Linux 2.6x RHEL kernel.

#include #define ROWS 1000000 #define COLS 4 int main(int args, char ** argv) { int matrix[ROWS][COLS]; for(int col=0;col<COLS;col++) for(int row=0;row < ROWS; row++) matrix[row][col] = row*col; return 0; } 

La matrix es una variable local dentro de su función main . Por lo tanto, está “asignado” en la stack de llamadas de la máquina.

Esta stack tiene algunos límites.

Debe hacer de su matrix una variable global o static o convertirla en un puntero y asignar en montón (con, por ejemplo, calloc o malloc ) la zona de memoria. No olvide que calloc o malloc pueden fallar (devolviendo NULL).

Una mejor razón para asignar tal cosa es que las dimensiones de la matriz deberían ser realmente una variable o alguna entrada. Hay algunas razones para conectar las dimensiones en el código fuente.

Heurística: no tiene un marco local (sum acumulada de tamaños de variables locales) más grande que un kilobyte o dos.

[por supuesto, hay excepciones válidas a esa heurística]

Está asignando una variable de stack, la stack de cada progtwig es limitada.

Cuando intenta asignar demasiada memoria de stack, su kernel matará su progtwig enviándole una señal SEGV, también conocida como falla de segmentación.

Si desea asignar porciones más grandes de memoria, use malloc , esta función obtendrá memoria del montón.

Su sistema no debe permitirle hacer una asignación de stack tan grande. Haga una matrix global o use la asignación dinámica (a través de malloc y free ) y debería estar bien.