problema de codigo

anthead

Power Member
Código:
void remover_galeria(struct galeria *primeira)
{
struct galeria *apAts=primeira; 
struct galeria *apDps=primeira->next;

int codigo;
printf("Introduza o codigo da Galeria a remover:");
scanf("%d",&codigo);
while(apAts!=NULL){
    if(apAts->codigo==codigo){
        free(apAts);
        break;
        }else{
        while(apDps!=NULL){
                if(apDps->codigo==codigo){
                    apAts->next=apDps->next;
                    free(apDps);
                    break;
                }
                apDps=apDps->next;
            }
        }
        apAts=apAts->next;
    }
}
-------------------------------------------------------------------------
Alguem me sabe explicar o que esta mal!??? Ao tentar remover a primeira galeria da lista da me um erro!!!
O erro é:
"Nome:
Codigo:-1073479405
Segmentation fault"

Cumprimentos,
 
Última edição pelo moderador:
O "apAts=apAts->next;" e "apDps=apDps->next;" têm que ser feitos antes do free respectivo senão perde-se a ligação entre a galeria anterior à que queres remover e a galeria posterior à que queres remover.
 
Julgo que que não passa por aí devido aos breaks, mas da maneira que o código está não consigo perceber bem lol
devias meter isso como tens no teu código, ou também tens isso assim mal identado?

cumpzz
 
mal identado???
Código:
void remover_galeria(struct galeria *primeira)
{
struct galeria *apAts=primeira; 
struct galeria *apDps=primeira->next;

int codigo;
printf("Introduza o codigo da Galeria a remover:");
scanf("%d",&codigo);
while(apAts!=NULL){
	if(apAts->codigo==codigo){
		free(apAts);
		break;
		}else{
		while(apDps!=NULL){
				if(apDps->codigo==codigo){
					apAts->next=apDps->next;
					free(apDps);
					break;
				}
				apDps=apDps->next;
			}
		}
		apAts=apAts->next;
	}
}
o que e que esta mal???
 
Última edição:
Boas, no teu código, ao removeres o elemento que está no início, estás a eliminar a referência para o início da tua lista. Em seguida, ao tentares iterar essa tua lista a partir da referência que apagaste, vais obter Segmentation Fault.

Para corrigires o problema, basta que quando apagas o elemento que está no início da lista (bloco que contém o free(apAts)), actualizes o ponteiro que aponta para o início da lista.
 
Back
Topo