PR03 - free() bagunçando posições da memória

PR03 - free() bagunçando posições da memória

por Cesar Gasparini Fernandes -
Número de respostas: 4

Olá!

Nosso grupo fez a função rehash para manter o coeficiente menor do que 10, mas quando damos um free() de um array "velho", ele acaba bagunçando o texto que ainda será lido no freq, adicionando açguns caracteres estranhos.

Procuramos mutio esse erro, mas não conseguimos achar nada relacionado.

Há algum motivo para o free() bagunçar posições de memória nem um pouco relacionada com o que mandamos "limpar"?

Obrigado!

Em resposta à Cesar Gasparini Fernandes

Re: PR03 - free() bagunçando posições da memória

por José Coelho de Pina -

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...triste
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.

Em resposta à José Coelho de Pina

Re: PR03 - free() bagunçando posições da memória

por José Coelho de Pina -

P.S. adicionando açguns caracteres estranhos. adicionando açguns caracteres estranhos.

A propósito, vocês estão colocando '\0' no final dos strings, certo?

Em resposta à José Coelho de Pina

Re: PR03 - free() bagunçando posições da memória

por Cesar Gasparini Fernandes -

Era isso mesmo!!!!! Faltava colocar o '\0' no final!!!

Muito obrigado!!!!!!