|
|||||||
|
|
|
![]() |
|
|
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 20: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: 22:10.




















