Estoy intentando depurar un programa en C y gdb me dice que hay una segfault en la línea 329 de una determinada función. Así que establecí un punto de quiebre para esa función y estoy tratando de atravesarlo. Sin embargo, cada vez que toco la línea 68 obtengo esta queja de gdb:Llamada a error de malloc en la sesión de gdb
(gdb) step
68 next_bb = (basic_block *)malloc(sizeof(basic_block));
(gdb) step
*__GI___libc_malloc (bytes=40) at malloc.c:3621
3621 malloc.c: No such file or directory.
in malloc.c
No sé lo que esto significa. El programa funciona perfectamente con todos los conjuntos, excepto uno, por lo que esta llamada a malloc claramente tiene éxito durante otras ejecuciones del programa. Y, por supuesto, que tengo:
#include <stdlib.h>.
Aquí está el código fuente:
// Block currently being built.
basic_block *next_bb = NULL;
// Traverse the list of instructions in the procedure.
while (curr_instr != NULL)
{
simple_op opcode = curr_instr->opcode;
// If we are not currently building a basic_block then we must start a new one.
// A new block can be started with any kind of instruction.
if (!in_block)
{
// Create a new basic_block.
next_bb = (basic_block *)malloc(sizeof(basic_block));
Si malloc está fallando, la causa más probable es la corrupción del montón. ¿Has probado ejecutar tu programa en valgrind? – JaredPar
usa 'siguiente' en lugar de 'paso'. Está intentando ingresar a malloc, y gdb se queja de que no tiene acceso al código fuente de malloc. Realmente no quieres entrar en malloc. –
Ah, gracias, 'siguiente' lo arreglé. – Schemer