Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 30

Discussione: [C] Problema struct

  1. #11
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da davide356
    C'è un motivo per cui non posso pubblicarlo.
    E questo lo si può capire benissimo.

    Nessuno chiede di avere esattamente il codice originale, ma almeno un codice logicamente equivalente.

    Sei in grado di fornire un pezzo di codice equivalente che riproduca esattamente il problema che riscontri (in gergo si parla di SSCCE, Short Self Contained Correct (and Compilable) Example)?

    Crea un codice (diverso da quello originale che non puoi postare) che riproduca esattamente il tuo problema e postalo. Altrimenti non si va avanti ed è inutile continuare su questa strada.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #12
    Il problema non è il long che è corrotto ma un altra variabile dello stesso struct che viene assegnata in automatico e che mi da dei problemi se inizializzo a 0.

    Il codice funziona perfettamente con i char visto che stampo il risultato per verificarne la correttezza.

    Ok ora pubblico un estratto del codice per capire cosa succede

  3. #13
    Le mie struct sono queste:
    codice:
    typedef struct percorso{
    	long id; 
    	//char id[20];
    	int n; // numero di nodi
    	nodo *nodi;
    	} percorso;
    typedef struct nodo{
    	long id;
    	//(char id[20];
    	int oraArr;
    	int oraPart;
    } nodo;
    il pezzo di main è questo:
    codice:
    int g=contiene(percorsi, A[j].B[h].id, p); //restituisce l'indice se è presente in percorsi
    			if(g>=0){
    				int d=percorsi[g].n;
    				percorsi[g].n=d+addnodo(&percorsi[g].nodi, A[j].id, A[j].B[h].oraArr, A[j].B[h].oraPart, d);
    				}
    			else{
    				p=p+addpercorso(&percorsi, A[j].B[h].id, p);
    				int d=percorsi[p-1].n;
    				percorsi[p-1].n=d+addnodo(&percorsi[p-1].nodi, A[j].id, A[j].B[h].oraArr, A[j].B[h].oraPart, d);}
    	}
    le funzioni sono queste:


    codice:
    int addnodo(nodo **n, long s, int oa, int op, int c){
    	c++;
    	(*n)=realloc((*n), c*sizeof(nodo));
    	(*n)[c-1].id = s;
    	(*n)[c-1].oraArr=oa;
    	(*n)[c-1].oraPart=op;
    	return 1;
    }
    int addpercorso(percorso **ps, long s, int n){
    	n++;
    	(*ps)=realloc((*ps),n*sizeof(percorso));
    	(*ps)[n-1].id=s;
    	return 1;
    	}
    Vi spiego un pò:
    C'è una array di strutture in cui viene aggiunto un percorso solo se un id fa parte già di un percorso già inserito. Se non c'è la funzione ritorna -1 e quindi crea un percorso e aggiunge una struttura nodo all'array nodi del percorso in questione. Se invece esiste già aggiunge solo un nodo all'array del percorso con l'indice ritornato dalla funzione contiene.

    Il problema è che quando vado a creare il percorso senza inizializzare n visto che n viene aggiornato dalla funzione a volte viene assegnato un valore casuale di 5 cifre. Questo succede solo se i campi id sia di nodo che di percorso sono long mentre se sono char è tutto corretto.

  4. #14
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dato che leggi un file dati, puoi indicare un esempio di file che leggi ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #15
    25430 8
    5086 162 168
    15258 1286 1292
    20344 1152 1153
    25430 791 792
    35602 210 212
    66118 118 124
    86462 491 504
    96634 489 497
    27973 13
    12715 1302 1308
    20344 873 876
    25430 1046 1047
    38145 217 218

    25430 è id di A mentre 8 rappresenta le righe all'interno di A
    5086 è l'id di B mentre 162 oraArr e 168 oraPart

    All'inizio vado a creare un percorso con id 5086 e aggiungo un nodo al percorso con id 25430 e oraArr e oraPart 162 e 168. Il nodo viene creato e il contatore dei nodi (n) all'interno di percorsi viene incrementato di 1.

  6. #16
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Veramente il programma legge

    162

    come numero di stazioni e

    15258

    come numero di treni (!)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #17
    no c'è d alla fine

  8. #18
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da davide356
    no c'è d alla fine
    ??
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #19
    alla fine delle chiamate alla funzione c'è la variabile d che è assegnata la riga sopra

  10. #20
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma cosa c'entra con quello che ti ho fatto notare?

    Io leggo quei valori dal file e le for delle stazioni viene eseguita 162 volte e quella dei treni 15 mila volte, ma ovviamente nel file non ci sono tutti questi dati.

    In queste condizioni non è possibile provare e fare qualche diagnosi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.