Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-10-2007, 19:30   #1
spk
Senior Member
 
L'Avatar di spk
 
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;
}
L'obiettivo era quello di creare una lista ordinata di dischi secondo "sl" (ovvero Spazio Libero). L'esercizio non presenta difficoltà fino a quando scopro che...non so nemmeno come definirlo...perdo dati.
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)
La stessa cosa succede ipotizzo anche al puntatore del "disco successivo" rendendomi perciò impossibile continuare il tutto.
Sapreste dirmi come risolvere il problema? Cosa sbaglio?
__________________
stabilmente instabile

Ultima modifica di spk : 29-10-2007 alle 19:33.
spk è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 19:41   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 19:47   #3
spk
Senior Member
 
L'Avatar di spk
 
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
spk è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 20:01   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da spk Guarda i messaggi
io ero convinto che fin quando c'era una qualcosa che puntava a un qualcos'altro quest'ultimo non veniva liberato.
C/C++ != Java/C#

Quote:
Originariamente inviato da spk Guarda i messaggi
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)
Ti conviene gestire la allocazione del "nodo" in modo dinamico.
<qui> avevo fatto un esempio basilare di inserimento in una lista linkata.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2007, 21:17   #5
spk
Senior Member
 
L'Avatar di spk
 
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
spk è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Dopo 23 anni di silenzio, Warcraft 3 spi...
Roblox sfida l'ecosistema gaming: app st...
OpenAI accusata di plagio dai migliori m...
Altro attacco hacker dell'IA: gli agenti...
Stiamo davvero perdendo il controllo del...
Microsoft perde un pilastro: Frank Shaw ...
Diablo V annunciato a sorpresa: il colpo...
Meno di 5 euro per il 5G: l'offerta Kena...
World of Warcraft: Forever è il Classic+...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:25.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v