Oi Cesar,
Muito obrigado por compartilhar.
Há algum motivo para o free() bagunçar posições de memória nem um pouco relacionada com o que mandamos "limpar"?
Hmm.
Não podemos pedir para o free()
pagar pelo que ele não comeu...
Pelo menos, quando algo assim ocorreu comigo, foi sempre algo errado que eu tinha feito.
Vocês devem ter comentido algum erro...
É difícil chutar qual pode ser o problema...
Com ponteiros, quando descobrimos algum problema, o erro pode ter sido a long long time ago, in an galaxy far far away
Isso torna as coisas muito mais difíceis...
Eu começaria olhando os malloc()
para verificar se aloquei o número certo de bytes para cada estrutura...
Por olhar entenda-se colocar printf()
em lugares estratégicos, ou utilizar o gdb.
Inclusive imprimiria o sizeof
das estruturas. O valgrind também ajuda a detectar se acessamos alguma posição da memoria indevida.
Outra coisa, se p
é um ponteiro para uma estrutura, uma maneira comum de alocarmos memoria é escrevermos
p = malloc(sizeof *p);
Esse sintaxe diz, me dê o número de bytes usados pela estrutura que é apontada por p
. Note que sizeof
não é uma função.
Depois de vocês descobrirem o problema, por favor, não deixem de compartilhar.