Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Quattro modi di indossarlo, stessa app del Plaud Note Pro e integrazione con il desktop. Il registratore IA da indossare di Plaud eccelle in mobilità, ma resta vincolato all'abbonamento ed è facile da perdere
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Xiaomi ha portato Redmi Watch 6 anche sul mercato italiano, puntando su un display AMOLED da 2,07 pollici con picco di luminosità a 2000 nit, frame in alluminio da 9,9mm e un'autonomia dichiarata di 12 giorni. Lo smartwatch gira su HyperOS 3 e integra GPS, Bluetooth 5.4 e oltre 150 sport mode. Il tutto a meno di 100 euro
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Con 22 tasti, il pulsante 5D, lo Shift Mode e il sensore PixArt 3395 da 26.000 DPI, il nuovo mouse wireless di Mad Catz si rivolge in modo preciso ai giocatori di MMO e RPG. Ma chi conosce già il R.A.T. 8+ ADV si accorgerà subito di quanto i due prodotti condividano, e di dove invece divergono
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


Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ...
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC Radeon RX 9070 GRE, AMD la porta in tutto il mon...
Reolink OMVI 3i WiFi: videosorveglianza più intelligente e facile da usare Reolink OMVI 3i WiFi: videosorveglianza pi&ugrav...
Samsung Galaxy S27 Pro: sarà lui ...
Così Google ha ottimizzato Chrome...
Xiaomi non cambia idea: il display poste...
LG presenta in Italia le gamme TV Micro ...
Sette anni dopo l'annuncio, The Wolf Amo...
'Non avrete aumenti': la decisione shock...
TIM lancia il Pass Mondiali DAZN: 104 pa...
Tesla Roadster, promessa o miraggio? La ...
Mark Hamilton, la tavola periodica del m...
Hanger 13 annuncia Uomo d'Onore: espansi...
La battaglia delle HBM4 entra nel vivo: ...
Dopo 12 anni torna Alien: Isolation. Ecc...
ADATA Trusta ridurrà i costi di i...
SpaceX fornirà 110.000 GPU NVIDIA...
Hyundai IONIQ 6 N-Line, prova in antepri...
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: 14:24.


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