2012-08-08 17 views
7

Este trozo de código C es que da un error de segmentación en GDBsigsev de malloc que me está volviendo loco

if ((seq_entry_action=malloc((seq_subphases)*sizeof(int*)))==NULL){ 
    printf("Cannot allocate memory for seq_entry_action\n"); 
} 

donde:

int **seq_entry_action=NULL; 
unsigned int seq_subphases=0; 

En el momento de la ejecución, y si añado un punto de interrupción en gdb justo antes de este fragmento de código (que es otra sentencia printf()), los valores son

(gdb) p seq_subphases 
$3 = 88 
(gdb) p seq_entry_action 
$4 = (int **) 0x0 

entonces p O prima siguiente y segfaults a malloc

Realmente no lo entiendo .....

+11

Eso es generalmente porque ha corrompido su montón. Lo que significa que el error podría ser casi cualquier parte de tu código. Prueba 'valgrind'. – Mat

+1

Corrió ese bit de código bajo centos 6.2 y gcc versión 4.4.6 y se compiló y ejecutó bien, lo que significa que corrompió su montón. –

+11

+1 por ser el primero hoy en SO que no arroja el valor de retorno de malloc. –

Respuesta

1

que era así de hecho ... un malloc anterior de sizeof calculado erróneamente() fue la razón de que esto no malloc .

Cuestiones relacionadas