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 12-11-2007, 11:59   #1
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
[c] linked list con array di char

salve, devo creare una linked list, in cui gli elementi sono stringhe, per cui ho deciso di salvarle in un array di char. Questa è la definizione della struttura list e della testa:

Codice:
/*elemento della linked list*/
struct list{
	char *parole[0];         /*array di char per inserire la stringa, ha un solo elemento perchè mi serve una sola stringa per elemento list*/
 	struct list  *next;
};

/*testa della linked list*/
typedef struct stack_link{
	 int cnt;          /*contiene il numero di elementi*/
	 struct list *top;      /*puntatore a top*/
 }stack_link;
ora vi posto le funzioni Reset (per inizializzare) e push
Codice:
void Reset(stack_link *stk_l){
	stk_l -> cnt = EMPTY;   /*EMPTY = -1*/
	stk_l -> top = NULL;   
}

void Push(char *d, stack_link *stk_l){
	struct list *p;                                   /*crea un nuovo elemento*/

	p = (struct list *)malloc(sizeof(struct list));   /*ne alloca lo spazio*/
	p -> parole[0] = (char *)calloc(8,sizeof(char));    /*alloco lo spazio per una nuova parola*/
	
	strcpy(p -> parole[0], d);                                  /*gli assegna la parola*/
	
	printf("%s\n", p -> parole[0]);        /*la parola è stata copiata correttamente*/
	
	
	p -> next = stk_l -> top;                         /*punta all'elemento precedente della lista*/
	stk_l -> top = p;                                 /*il top dello stack punterà a questo nuovo elemento*/
	
	stk_l -> cnt++;                                   /*incremento il contatore degli elementi*/
       printf("controllo inserimento: %s\n", stk_l -> top -> parole[0]);
}
quando faccio il controllo, cioè printf("controllo inserimento: %s\n", stk_l -> top -> parole[0]); mi da un errore...ma non capisco perchè, visto che p-> parole[0] se controllate contiene in modo corretto la parola, mentre poi si perde!! che errore c'è nella funzione???

cmq se invece di implementarla con gli array di char la implemento con i char, funziona tranquillamente.

grazie
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2007, 12:20   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
sorry
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2007, 14:31   #3
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Codice:
char *parole[0];
perchè [0] ???

EDIT:
non ho mai visto una dichiarazione del genere ma temo che tu stia allocando un puntatore in un puntatore non inizializzato.

comunque se lo trasformi in
Codice:
char *parole;
com'è giusto che sia, funziona il tutto
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve

Ultima modifica di trallallero : 12-11-2007 alle 14:44.
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2007, 16:34   #4
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
fatto ti ringrazio...ora però ho un problema con pop, cioè sembra che il valore di ritorno di questa funzione è completamente sballato..fatto di simboli strani. Se in Pop provi a leggere il valore di p -> parole oppure stk_l -> top -> parole oppure il valore di d ti compare correttamente, ma chiamandola ad esempio dal main con printf("%s\n", Pop(&s)); stampa male!! A me sembra scritta bene la funzione....inoltre la memoria è liberata correttamente???

Codice:
char *Pop(stack_link *stk_l){
	char *d;
	struct list *p;                         
	strcpy(d, stk_l -> top -> parole); 
	p = stk_l -> top;                    
	stk_l -> top = stk_l -> top -> next;  
	stk_l -> cnt--;                       
	free(p -> parole);               
	free(p);                               
	return d;
}
nel main la richiamo cosi:
Codice:
stack_link s;
Reset(&s);
Push("a", &s);
Push("b", &s);
printf("%s\n", Pop(&s));
ps nella Push alloco la memoria per la stringa con malloc
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread

Ultima modifica di gepeppe : 12-11-2007 alle 16:48.
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2007, 08:20   #5
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
uhm ... vedo un puntatore ... anarchico

Codice:
	char *d;
	...
	strcpy(d, stk_l -> top -> parole); 
	...	
	return d;
hai dichiarato d senza neanche inizializzarlo a NULL
Poi ci scrivi dentro senza sapere a che indirizzo punta.
Poi ritorni un puntatore locale che non ha allocato la sua memoria.
3 righe 3 errori

Se vuoi ti spiego come risolvere ma se ci arrivi da solo te lo ricordi meglio poi.
Fammi sapere
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2007, 12:11   #6
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
capito...ho dichiarato d, alloco la memoria per d (con malloc....), ci copio dentro il valore, restituisco d....nella funzione chiamante poi faccio una bella free....è giusto??
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2007, 12:22   #7
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da gepeppe Guarda i messaggi
capito...ho dichiarato d, alloco la memoria per d (con malloc....), ci copio dentro il valore, restituisco d....nella funzione chiamante poi faccio una bella free....è giusto??
esatto

ma non so se logicamente sia giusto
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è 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, ...
Servizi in streaming sempre più c...
Anteprima della Leapmotor B03X: inizia l...
Anthropic accusa la Cina: Claude utilizz...
I satelliti Rassvet (Starlink russo) di ...
Un agente IA ha risolto un problema su W...
Cina: la CMSA potrebbe cambiare parte de...
68 mensilità di bonus per i dipen...
Rocket Lab ha fatto ricorso contro la de...
Nutanix rende disponibile Azure Virtual ...
Il padrino del deep learning avverte: gl...
Il finto avviso "iPhone Storage is Full"...
Dietrofront in Cina, addio touchscreen p...
Un piccolo accessorio trasforma lo smart...
Dopo 370 anni il Cyphral Distich non è p...
Oppo Find X10, X10 Pro Max e X10 E: conf...
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: 17:55.


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