Sto provando a eseguire il debug di un programma C e gdb mi sta dicendo che c'è un segfault sulla riga 329 di una certa funzione. Così ho impostato un punto di interruzione per quella funzione e sto provando ad attraversarlo. Tuttavia, ogni volta che colpisco la linea 68 ricevo questo reclamo da gdb:Chiamata a malloc fallendo nella sessione 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
Non so cosa significhi. Il programma funziona perfettamente su tutti gli input tranne uno, quindi questa chiamata a malloc riesce chiaramente durante altre esecuzioni del programma. E, naturalmente, ho:
#include <stdlib.h>.
Ecco il codice sorgente:
// 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));
Se malloc non riesce la causa più probabile è la corruzione heap. Hai provato a eseguire il tuo programma con valgrind? – JaredPar
usa 'next' invece di 'step'. Stai cercando di entrare in malloc, e gdb si lamenta che non ha accesso al codice sorgente per malloc. Davvero non vuoi entrare in Malloc. –
Ah, grazie, 'successivo' risolto. – Schemer