
ovidiojf
(usa Ubuntu)
Enviado em 10/06/2011 - 12:00h
Amigos,
Já li os artigos aqui do VOL sobre alocação dinâmica, perguntei ao google, e ainda tem uma dúvida.
Se entendi bem, pela razão, toda chamada a malloc() deve ter uma correspondente free(), Ok?
Então se uma varivel char* string recebe o retorno de uma função char *DaStr, que alloca memoria para construir uma string e retorná-la, devo chamar free(string); assim que terminar de usá-la ou antes de um nova atribuição. Ok?
Quando chamo free(string); o compilador gera um warring: "attempt to free a non-heap object 'string'"
Poque? Será que compilador não consegue detectar que a alocação dinâmica? Devo ignoar o a mensagem ou existe algum erro na lógica ?
Outra dúvida, se a função allocar, digamos, 256 bytes, mas a string construída tiver apenas poucos bytes (tipo... result[5] = 0), free(string) irá liberar os 256 ou num caso desses teremos um vazamento de memória?
dede já, brigado.