Gestão de Memória (pilha elástica): Difference between revisions
From Wiki**3
No edit summary |
No edit summary |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
Este exemplo faz uso de uma [[Pilha (dimensão variável)|pilha de strings de dimensão variável]] para armazenar dados lidos da linha de comando. | Este exemplo faz uso de uma [[Pilha (dimensão variável)|pilha de strings de dimensão variável]] para armazenar dados lidos da linha de comando. | ||
== | == Ficheiro main.c == | ||
* [[ | void processa_linha_de_comandos(int argc, char **argv, struct pilha *p) { | ||
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(p, 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", tamanho(p)); | |||
else | |||
printf("Não consegui guardar a partir do %dú argumento (%s).\n", ax, argv[ax]); | |||
} | |||
Note-se a libertação de memória (reserva efectuada em <code>[[Pilha (dimensão variável)|push]]</code>). | |||
int main(int argc, char *argv[]) { | |||
char *ptr = NULL; | |||
struct pilha p; | |||
inicia(&p); | |||
printf("Sou %s, uma pilha de 'strings'.\n", argv[0]); | |||
processa_linha_de_comandos(argc, argv, &p); | |||
while ((ptr = pop(&p))) { | |||
printf("Li da pilha: %s\n", ptr); | |||
'''free'''(ptr); /* libertar memória (malloc em push) */ | |||
} | |||
printf("Hmm! Li tudo: a pilha ficou com %d elementos.\n", tamanho(&p)); | |||
return 147; | |||
} | |||
== Ver Também == | |||
* [[Gestão de Memória (exemplo com pilha)]] | |||
Latest revision as of 10:54, 24 March 2009
Este exemplo faz uso de uma pilha de strings de dimensão variável para armazenar dados lidos da linha de comando.
Ficheiro main.c
void processa_linha_de_comandos(int argc, char **argv, struct pilha *p) {
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(p, 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", tamanho(p));
else
printf("Não consegui guardar a partir do %dú argumento (%s).\n", ax, argv[ax]);
}
Note-se a libertação de memória (reserva efectuada em push).
int main(int argc, char *argv[]) {
char *ptr = NULL;
struct pilha p;
inicia(&p);
printf("Sou %s, uma pilha de 'strings'.\n", argv[0]);
processa_linha_de_comandos(argc, argv, &p);
while ((ptr = pop(&p))) {
printf("Li da pilha: %s\n", ptr);
free(ptr); /* libertar memória (malloc em push) */
}
printf("Hmm! Li tudo: a pilha ficou com %d elementos.\n", tamanho(&p));
return 147;
}