【发布时间】:2010-11-05 00:55:23
【问题描述】:
我在 C 中创建了一个名为“remover”的函数,用于删除数组“lista”的结构。此函数调整“列表”的大小。问题是我试图打印“lista”的元素,但它打印出奇怪的东西。 当我不释放“lista_aux”时,程序正常运行。为什么会这样?
typedef struct localidade{
char nome[31];
float local[3];
}Localidade;
Localidade** remover(Localidade** lista, char end_remover[], int posicao){
int i, j;
int pos_remover;
char nome_aux[31];
Localidade** lista_aux;
lista_aux = (Localidade**) malloc((posicao) * sizeof(Localidade*));
if( lista_aux == NULL){
printf("Erro na alocacao de memoria!\n");
exit(-1);
}
for( i = 0; i < posicao; i++){
lista_aux[i] = (Localidade*) malloc(sizeof(Localidade));
if( lista_aux[i] == NULL){
printf("Erro na alocacao de memoria!\n");
exit(-1);
}
}
for( i = 0; end_remover[i]; i++ ){
end_remover[i] = toupper( end_remover[i] );
}
for( i = 1; i < posicao; i++){
strcpy( nome_aux, lista[i]->nome);
for( j = 0; nome_aux[j]; j++){
nome_aux[j] = toupper( nome_aux[j] );
}
if( !(strcmp( end_remover, nome_aux)) ){
pos_remover = i;
break;
}
else if( i == posicao ){
printf("Endereco nao cadastrado.\n");
}
}
for( i = 0; i < posicao; i++){
if( i < pos_remover ){
lista_aux[i] = lista[i];
}
else{
lista_aux[i] = lista[i + 1];
}
//printf("***%s\n", lista_aux[i]->nome);
}
lista = (Localidade**) realloc( lista, (posicao)*sizeof(Localidade*));
lista = lista_aux;
//printf("*****%s\n", lista[1]->nome);
/*for( i = 0; i < posicao; i++ ){
printf("***%s\n", lista[i]->nome);
}
for( i = 0; i < posicao; i++ ){
printf("*****%s\n", lista_aux[i]->nome);
}*/
/*for( i = 0; i < posicao; i++){
free( lista_aux[i] );
}
free( lista_aux );*/
return lista;
}
【问题讨论】:
-
选择代码并按 CTRL+K 以正确格式化。有一个预览窗口。使用它!