1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

problema de codigo

Discussão em 'Programação' iniciada por anthead, 7 de Abril de 2008. (Respostas: 5; Visualizações: 603)

  1. anthead

    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: 12 de Abril de 2008
  2. Baderous

    Baderous Banido

    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.
     
  3. anthead

    anthead Power Member

    como assim??

    cumprimentos,
     
  4. Tyran

    Tyran Power Member

    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
     
  5. anthead

    anthead Power Member

    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: 8 de Abril de 2008
  6. AliFromCairo

    AliFromCairo Power Member

    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.
     

Partilhar esta Página