Gestão de Memória (exemplo com pilha)
From Wiki**3
Este exemplo faz uso de uma pilha de strings para armazenar dados lidos da linha de comando.
A função processa_linha_de_comandos
processa e armazena os dados de entrada.
void processa_linha_de_comandos(int argc, char **argv) { unsigned ax; unsigned char falhei = 0; printf("Há %d argumentos na linha de comandos...\n", argc-1); for (ax = 1; ax < argc; ax++) { char *arg = argv[ax]; printf("Vou guardar o %dº argumento: %s... \t", ax, arg); if (push(arg) != FALHA) printf("consegui!!\n"); else { printf("falhei! Vou ignorar os restantes %d argumentos.\n", argc - ax); falhei = 1; break; } } if (!falhei) printf("Uff! Guardei tudo: a pilha tem %d elementos.\n", nframes()); else printf("Não consegui guardar a partir do %dº argumento (%s).\n", ax, argv[ax]); }
A função main
, depois de processar os dados de entrada (ver acima), apresenta o conteúdo da pilha de armazenamento. Notar o uso de free
(a reserva -- com malloc
-- foi efectuada durante a operação push
).
int main(int argc, char *argv[]) { char *ptr = NULL; printf("Sou %s, uma pilha de 'strings'. Capacidade: %d 'strings'.\n", argv[0], TAMANHO); processa_linha_de_comandos(argc, argv); while ((ptr = pop())) { printf("Li da pilha: %s\n", ptr); free(ptr); /* liberta memória reservada com 'malloc' em 'push'!! */ } printf("Hmm! Li tudo: a pilha ficou com %d elementos.\n", nframes()); return 73; }