Erro memory corruption

Erro memory corruption

por Lucas Silva -
Número de respostas: 3

Na minha função quickSortFilmes, quando eu vou alocar a estrutura da lista de filmes no segundo nível de recursão, recebo esse erro:

*** glibc detected *** ./imdb: malloc(): memory corruption: 0x000000000231d320 ***

mas eu não sei o quê pode estar gerando ele, dado que na primeira chamada da função, esse erro não aparece.

Em resposta à Lucas Silva

Re: Erro memory corruption

por José Coelho de Pina -

Oi Lucas,

Não sei qual é o problema, mas depois de ler as respostas a seguir sugiro que você o exato momento em que o programa explode e vrifique so seu programa não está escrevendo em área não alocada de memória:

http://stackoverflow.com/questions/4616503/malloc-memory-corruption-in-c
http://stackoverflow.com/questions/19057079/glibc-detected-malloc-memory-corruption-in-c

Por favor, depois, não deixe de relatar aqui qual foi o problema.  

Em resposta à José Coelho de Pina

Re: Erro memory corruption

por Lucas Silva -

Então, depois eu vi o que eu tava errando, mas não sei porque isso gerou esse erro.

Eu fazia isso:

lst1 = mallocSafe(sizeof(ListaFilmes));

lst1->cab = mallocSafe(sizeof(ListaFilmes));

acho que o erro tava aparecendo porque eu alocava espaço de uma estrutura x para algo que deveria ser de uma estrutura y. Mas eu pensava que isso daria erro na hora de alocar o lst1->cab e não numa próxima chamada dessa função.

 

Em resposta à Lucas Silva

Re: Erro memory corruption

por José Coelho de Pina -

depois eu vi o que eu tava errando

Legal!

Mas eu pensava que isso daria erro na hora de alocar o lst1->cab e não numa próxima chamada dessa função.

O malloc simplesmente te devolve um ponteiro para um certo número de bytes.
O número de bytes e de responsabilidade do programador.
O galho vai dar na hora de usar.
Se pedimos 10 bytes e depois vamos, de alguma maneira, manipular 15 podemos (com sorte) ter um explosão.
Se der azar só vai explodir muito na frente...
Por exemplo, no EP2 de um de vocês o número de bytes alocados era menor do que o necessário e o programa explodia na hora do free...