Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C] Segmentation in una lista...mi sembra corretta

    xchè mi dà un segmentation fault?
    a me sembra corretta
    forse l'ultimo paus->next = NULL; è impostato male?


    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    struct hello {
    	int inf;
    	struct hello *next;
    };
    
    void creaPrimo(int ins);
    void creaAltri(int ins);
    
    main()
    {
    	int ins;
    	struct hello *p, *paus;
    	
    	printf("Inserisci il primo elemento:\n");
    	scanf("%d", &ins);
    	
    	/* Caso primo elemento */
    	if(ins == 0)
    		p = NULL;
    	else {
    		creaPrimo(ins);
    		paus = p->next;
    		/* Caso altri elementi */
    		do {
    			printf("Inserisci elementi successivi:\n");
    			scanf("%d", &ins);
    			creaAltri(ins);
    		} while (ins != 0);
    		paus->next = NULL;
    	}
    }
    
    void creaPrimo(ins) {
    	int size;
    	struct hello *p;
    	size = sizeof(struct hello);
    	p = (struct hello*)malloc(size);
    	p->inf = ins;
    	p->next = NULL;
    }
    
    void creaAltri(ins) {
    	int size;
    	struct hello *paus;
    	size = sizeof(struct hello);
    	paus = (struct hello*)malloc(size);
    	paus->inf = ins;
    	paus = paus->next;
    }
    live free or die

  2. #2
    Ma cos'è? Una lista?

    Se è una lista, dove ritorni il valore del puntatore di testa, o dove glielo passi? :tongue:

  3. #3
    che casino...

    posso lasciarlo in 2 funzione separate la creazione degli elementi? o devo usarne per forza uno?

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    struct hello {
    	int inf;
    	struct hello *next;
    };
    
    struct hello *creaPrimo(int ins);
    struct hello *creaAltri(int ins);
    
    main()
    {
    	int ins;
    	struct hello *p, *paus;
    	struct hello *listaPtr;
    	
    	printf("Inserisci il primo elemento:\n");
    	scanf("%d", &ins);
    	
    	/* Caso primo elemento */
    	if(ins == 0)
    		p = NULL;
    	else {
    		listaPtr = creaPrimo(ins);
    		paus = p->next;
    		/* Caso altri elementi */
    		do {
    			printf("Inserisci elementi successivi:\n");
    			scanf("%d", &ins);
    			listaPtr = creaAltri(ins);
    		} while (ins != 0);
    		paus->next = NULL;
    	}
    }
    
    struct hello *creaPrimo(ins) {
    	int size;
    	struct hello *p;
    	size = sizeof(struct hello);
    	p = (struct hello*)malloc(size);
    	p->inf = ins;
    	p->next = NULL;
    	return p;
    }
    
    struct hello *creaAltri(ins) {
    	int size;
    	struct hello *p,*paus;
    	size = sizeof(struct hello);
    	paus = (struct hello*)malloc(size);
    	paus->inf = ins;
    	paus = paus->next;
    	return p;
    }
    live free or die

  4. #4
    ora mi dà un errore mai visto

    errore
    Inconsistency detected by ld.so: dl-fini.c: 50: _dl_fini: Assertion `_rtld_local._dl_nloaded > 0' failed!

    codice

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    struct hello {
    	int inf;
    	struct hello *next;
    };
    
    struct hello *creaPrimo(int ins);
    struct hello *creaAltri(int ins);
    
    main()
    {
    	int ins;
    	struct hello *p, *paus;
    	struct hello *listaPtr;
    	
    	printf("Inserisci il primo elemento:\n");
    	scanf("%d", &ins);
    	
    	/* Caso primo elemento */
    	if(ins == 0)
    		p = NULL;
    	else {
    		listaPtr = creaPrimo(ins);
    		paus = p;
    		/* Caso altri elementi */
    		do {
    			printf("Inserisci elementi successivi:\n");
    			scanf("%d", &ins);
    			listaPtr = creaAltri(ins);
    		} while (ins != 0);
    		paus->next = NULL;
    	}
    }
    
    struct hello *creaPrimo(ins) {
    	int size;
    	struct hello *p;
    	size = sizeof(struct hello);
    	p = (struct hello*)malloc(size);
    	p->inf = ins;
    	p->next = NULL;
    	return p;
    }
    
    struct hello *creaAltri(ins) {
    	int size;
    	struct hello *p,*paus;
    	size = sizeof(struct hello);
    	paus = (struct hello*)malloc(size);
    	paus->inf = ins;
    	paus = paus->next;
    	return p;
    }
    live free or die

  5. #5
    Penso di aver capito cosa devi fare.
    In pratica devi inserire in una lista una serie di numeri preceduti da 0 numeri, .. 0.

    Non ho capito perchè utilizzi due funzioni di accodamento, cmq è sbagliato visto che i parametri alle funzioni bisogna passarli.

    In questo fourm c'era un esempio che ti hop scritto di una lista funzionante, usa quello mettendo la condizione, prima di inserire ogni elemento.

    Ciao.

  6. #6
    ho capito grazie...in verità volevo farlo tutto da solo un esercizio sul libro
    ma proprio nn riesco a capire xchè mi dà il segmentation
    live free or die

  7. #7
    Non sò, dovrei controllare.

    A occhio il code è sbagliato, visto che nella seconda funzioni ritorni un puntatore che non hai assegnato a niente.

    In più devi anche passare il puntatore di testa.

  8. #8
    quale sarebbe il puntatore?
    ora l'ho cambiata...ma l'errore è incomprensibile

    bash-2.05b$ ./18.1
    Inserisci il primo elemento:
    5
    Inserisci elementi successivi:
    4
    Inserisci elementi successivi:
    5
    Inserisci elementi successivi:
    3
    Inserisci elementi successivi:
    0
    Inconsistency detected by ld.so: dl-fini.c: 50: _dl_fini: Assertion `_rtld_local._dl_nloaded > 0' failed!



    cmq il codice eccolo

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    struct hello {
    	int inf;
    	struct hello *next;
    };
    
    struct hello *creaLista(int ins);
    
    main()
    {
    	int ins;
    	struct hello *p, *paus;
    	struct hello *listaPtr;
    	
    	printf("Inserisci il primo elemento:\n");
    	scanf("%d", &ins);
    	
    	/* Caso primo elemento */
    	if(ins == 0)
    		p = NULL;
    	else {
    		listaPtr = creaLista(ins);
    		paus = p;
    		/* Caso altri elementi */
    		do {
    			printf("Inserisci elementi successivi:\n");
    			scanf("%d", &ins);
    			listaPtr = creaLista(ins);
    		} while (ins != 0);
    		paus->next = NULL;
    	}
    }
    
    struct hello *creaLista(ins) {
    	struct hello *p, *paus; 
    
    	int size;
    	if (!p) {
    	struct hello *p;
    	size = sizeof(struct hello);
    	p = (struct hello*)malloc(size);
    	p->inf = ins;
    	p->next = NULL;
    	} else {
    	size = sizeof(struct hello);
    	paus = (struct hello*)malloc(size);
    	paus->inf = ins;
    	paus = paus->next;
    	return p;
    	}
    }
    live free or die

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.