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

    [C] problema con funzione

    Buongiorno,
    ho un problema con una funzione che ho creato:

    codice:
    int addpercorso(percorso *ps, char *s, int n){
    	n++;
    	ps=realloc(ps,n*sizeof(percorso));
    	strcpy(ps[n-1].id, s);
    	printf("%s \n", ps[n-1].id);
    	return 1;
    Il printf viene eseguito correttamente ma poi in esecuzione fa "Segmentation fault (core dump)" In compilazione non c'è nessun errore.

    La funzione viene chiamata in questo modo:

    codice:
    percorso *percorsi=NULL;  p=p+addpercorso(percorsi, id, p);
    id è una stringa mentre p un intero.

    Grazie in anticipo della risposta

    Davide

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590

    Re: [C] problema con funzione

    codice:
    int addpercorso(percorso **ps, char *s, int n){
    	n++;
    	*ps = realloc(*ps,n*sizeof(percorso));
    	strcpy((*ps)[n-1].id, s);
    	printf("%s \n", (*ps)[n-1].id);
    	return 1;
    }
    codice:
    percorso *percorsi=NULL;  p=p+addpercorso(&percorsi, id, p);
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    Perchè il tuo problema possa essere capito sarebbe necessario almeno un pezzo di programma funzionante . .compresa la definizione della struttura

    EDIT:sono stato preceduto con anche la soluzione

  4. #4
    Ok grazie
    Volevo fare una domanda giusto per capire:
    quando si dichiara ci riferisce a un puntatore di puntatore come nel caso percorso **ps non ci si riferisce ad un array multidimensionale?

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    No, gli array multidimensionali sono un caso speciale in C, e sono "trasformati" a compile-time in un array monodimensionale seguendo queste regole:
    codice:
    int array[N][M]; -> int array[N*M];
    array[n][m] -> array[n*M+m]
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Non riesco a venirne fuori
    codice:
    void addnodo(percorso *p, char *s, int oa, int op){
    	(*p).n=(*p).n +1;
    	int v=(*p).n;
    	(*p).nodi=realloc((*p).nodi, (*p).n*sizeof(nodo));
    	strcpy((*p).nodi[v-1].idstaz, s);
    	printf ("idstazione: %s\n", (*p).nodi[v-1].idstaz);
    	(*p).nodi[v-1].oraArr=oa;
    	(*p).nodi[v-1].oraPart=op;
    	printf("Ora arrivo: %d Ora partenza: %d \n", (*p).nodi[v-1].oraArr, (*p).nodi [v-1].oraPart);
    }
    
    int addpercorso(percorso **ps, char *s, int n){
    	n++;
    	*ps=realloc(*ps,n*sizeof(percorso));
    	strcpy((*ps)[n-1].id, s);
    	return 1;
    	}
    Ho un altra funzione che aggiunge dei nodi un determinato percorso però credo che non sia giusta neppure questa.
    Le funzioni si riferiscono a queste strutture:
    codice:
    typedef struct nodo{
    	char idstaz[10];
    	int oraArr;
    	int oraPart;
    } nodo, *List;
    
    typedef struct percorso{
    	char id[10];
    	int n;
    	nodo *nodi;
    	} percorso;
    le chiamata ad addnodo è questa:
    codice:
     addnodo(&percorsi[g], stazioni[j].id, stazioni[j].treni[h].oraArr, stazioni[j].treni[h].oraPart);

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 © 2025 vBulletin Solutions, Inc. All rights reserved.