|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2002
Città: Hampstead, London
Messaggi: 2449
|
[C]help memoria che cambia il suo contenuto da sola
Salve a tutti, gia ringrazio anticipatamente per le risposte.
Il mio problema riguarda questo codice: Codice:
#include <stdio.h> struct disco { int id; int sl; struct disco *succ; }x={0, 1000000, NULL}; struct disco *primo=&x; float totale=0; int n_dischi=1; void inserisci(struct disco *uno, struct disco *due, struct disco *nuovo) { if(nuovo->sl < due->sl) { nuovo->succ=due; uno->succ=nuovo; } else { if(due->succ == NULL) { due->succ=nuovo; } else { inserisci(due, due->succ, nuovo); } } } void inserisci_disco(struct disco *nuovo) { if(nuovo->sl < primo->sl) { nuovo->succ=primo; primo=nuovo; } else { if(primo->succ == NULL) { primo->succ=nuovo; } else { inserisci(primo, primo->succ, nuovo); } } } void nuovo_file(int dfile) { if (primo->sl >= dfile) { primo->sl -= dfile; totale += dfile; } else { struct disco nuovo={n_dischi, (1000000-dfile), NULL}; inserisci_disco(&nuovo); n_dischi++; totale += dfile; // primo.succ=&nuovo; } } void to_string(struct disco *d) { if(d->succ == NULL) { printf("file size sum\t= %1.6f GB\ntotal disk\t= %d\n",(totale/1000000),n_dischi); printf("\t%d %d:\n",d->id,d->sl); } else { to_string(d->succ); printf("\t%d %d:\n",d->id,d->sl); } } int main() { nuovo_file(500000); nuovo_file(300000); nuovo_file(700000); printf("pippo %i\n",primo->succ->id); printf("pippo %i\n",primo->succ->id); printf("pippo %i\n",primo->succ->id); //nuovo_file(710000); to_string(primo); return 0; } Se notate nel main() eseguo 3 printf identiche tutte di seguito all'altra. Ora quando mando in esecuzione invece di scrivermi 3 volte il valore esatto mi fa questo tipo di output: Codice:
./a.out pippo 1 pippo -1079252524 pippo -1079252524 Segmentation fault (core dumped) Sapreste dirmi come risolvere il problema? Cosa sbaglio? ![]()
__________________
stabilmente instabile Ultima modifica di spk : 29-10-2007 alle 19:33. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Nella funzione nuovo_file(), la variabile struct disco nuovo è locale. Vuol dire che quando la funzione termina, quella variabile sparisce!
Certo .. l'indirizzo &nuovo l'hai passato a inserisci_disco() ma una volta che nuovo_file() termina e magari successivamente chiami altre funzioni, cosa ci sia sullo stack a quell'indirizzo .... non si sa....
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2002
Città: Hampstead, London
Messaggi: 2449
|
Rapidissimo e con la precisione di un chirurgo, io ero convinto che fin quando c'era una qualcosa che puntava a un qualcos'altro quest'ultimo non veniva liberato.
Ho spostato "struct disco nuovo" e ora è accessibile. Ora sembra funzionare (ancora non va tutto come dovrebbe ma almeno le variabili sono quello che dovrebbero essere) grazie ![]()
__________________
stabilmente instabile |
![]() |
![]() |
![]() |
#4 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() Quote:
<qui> avevo fatto un esempio basilare di inserimento in una lista linkata.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 2002
Città: Hampstead, London
Messaggi: 2449
|
Ho rifatto tutto usando il codice della pagina da te linkata come nocciolo da ampliare. Ho un po di difficoltà a capire dei passaggi, piu' che capire intuisco
![]() Grazie di nuovo ![]()
__________________
stabilmente instabile |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:58.