Olá meus caros!
Vou exemplificar com alguns códigos genéricos a minha dúvida sobre o retorno de ponteiro na linguagem C.
Considerem a função:
int* funcao_1(){
int* prt = (int*) malloc(sizeof(int));
return ptr;
}
Considere que esse ponteiro será retornado para uma variável dentro de outra função.
int* funcao_2(){
int* prt = funcao_1(); // Invoca a 1º função
// faz alguma coisa
// valida os dados, etc..
return prt;
}
Considere que este ciclo se repita para mais funções e/ou procedimentos, etc. E que em algum momento, o dado guardado não será mais necessário para a aplicação e poderemos liberá-lo, usualmente como:
free(ptr);
prt = NULL;
Na função principal do C, a Main() - eu utilizo o mínimo de rotinas possíveis e deixo que algumas funções básicas realizem o processamento do algoritmo e retornem por ponteiro algum espaço de memória que poderá conter dados lidos via teclado, texto, etc. A questão é que não vejo como boa prática poluir a função Main(). Prefiro modularizar o código e criar uma rotina maior que os engloba, a fim de dar coesão para os procedimentos e funções.
Considerando o retorno das funções acima, é uma boa prática alocar em uma dada função, um espaço de memória no Heap - usando malloc(), e retornar aquele ponteiro para outras funções a fim de por exemplo reduzir o uso de variáveis globais ou mesmo a declaração de novas variáveis locais? (Considerando que a liberação do espaço é feito por outra função.) Na questão de boas práticas, o que seria uma boa alternativa considerando a performance e manutenção do código?
Grato!