paulo1205
(usa Ubuntu)
Enviado em 26/02/2015 - 17:11h
adahoff escreveu:
Caro Paulo
Obrigada pela resposta resolvi o problema com a falha de segmentação.
Consegui resolver o problema com o fclose mas ao passar para a próxima rotina a mensagem: "malloc(): memory corruption: 0x0000000002bf0960" continua a aparecer vc sabe me dizer o que está acontecendo?
Tudo o que eu disse antes continua valendo. Você tem de tomar cuidado com índices de arrays, tanto os alocados dinamicamente por meio de ponteiros (casos de
A1 e
A2, no programa que você mostrou anteriormente) quanto os declarados explicitamente como arrays, mesmo em arrays multidimensionais (como o
G e o
H, dos quais você só mostrou uso, mas não a declaração). Se você diz que uma dimensão de um array tem
N elementos,
você tem de garantir que os índices a ela aplicados vão ser contados apenas de
0 a
N-1.
Fora isso, outros erros comuns que afetam
malloc(),
realloc() e
free(), e que talvez você queira verificar, são:
- Sobrescrever (intencionalmente ou acidentalmente, inclusive por veio de extrapolação de limites de arrays, como descrito acima) o valor de um ponteiro alocado com
malloc()/
realloc() com outro valor qualquer, que geralmente é estranho para as rotinas de gestão dinâmica de memória e atrapalha chamadas posteriores a
realloc() e
free().
- Chamar
free() duas ou mais vezes sobre o mesmo ponteiro, mesmo que esse ponteiro inicialmente tivesse um valor válido.
- Ter várias variáveis ponteiro apontando para o mesmo objeto (aliasing), e indistintamente realizar operações de realocação ou liberação sobre algumas delas, e não refletir as alterações nas demais.
- Não testar o valor retornado por
malloc() eou
realloc() antes de utilizá-lo.
- Continuar usando um ponteiro depois de ter chamado
free() sobre ele.
No seu caso, continuo apostando no problema que apontei antes.