Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
OnePlus 15 nasce per alzare l'asticella delle prestazioni e del gaming mobile. Ma non solo, visto che integra un display LTPO 1,5K a 165 Hz, OxygenOS 16 con funzioni AI integrate e un comparto foto con tre moduli da 50 MP al posteriore. La batteria da 7.300 mAh con SUPERVOOC 120 W e AIRVOOC 50 W è la ciliegina sulla torta per uno smartphone che promette di offrire un'esperienza d'uso senza alcun compromesso
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
Vediamo come si comporta il Ryzen 5 7500X3D, nuovo processore di casa AMD che fonde 6 core Zen 4 con la tecnologia 3D V-Cache, particolarmente utile in scenari come il gaming. Annunciato a un prezzo di listino di 279€, il nuovo arrivato sarà in grado di diventare un riferimento per i sistemi budget? Ecco cosa ne pensiamo.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-07-2009, 13:57   #1
Abdujaparov
Senior Member
 
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
[C] Allocazione dinamica della memoria

Ciao a tutti,
vorrei creare un array che si allarga dinamicamente in modo da avere un vettore con tutto ciò che l'utente ha inserito da stdin.
Ho definito queste due strutture:
Codice:
struct Persona{
	char nome[30];
	char cognome[30];
};


struct vettorePersone{
	int size;
	struct Persona* elementi;
};
Successivamente ho provato ad insere le varie strutture Persona in elementi in questo modo:
Codice:
struct vettorePersone vett;
vett.size=0;

	do{
		struct Persona pers; 
		printf("Inserisci nome e cognome separati da spazio...\n");
		scanf("%s %s", pers.nome, pers.cognome);
		printf("Nome: %s\nCognome: %s\n", pers.nome, pers.cognome);
		vett.elementi = (struct Persona *)malloc(sizeof(struct Persona)*(++vett.size));
		*(vett.elementi+vett.size)=pers;
		vett.size++;
		printf("Continuare? s/n \n");
		scanf("%s", risposta);
	}while(strcmp(risposta,"n")!=0);
In questo modo però ottengo un segmentation fault a runtime. Come posso risolvere? Dove e cosa sbaglio?
Grazie, ciao ciao.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2009, 14:27   #2
jack_burton1985
Member
 
Iscritto dal: Mar 2008
Messaggi: 93
L'errore risiede nell'incremento di vett.size durante la malloc
Codice:
vett.elementi = (struct Persona *)malloc(sizeof(struct Persona)*(++vett.size));
così facendo, nella successiva operazione di salvataggio dei dati appena inseriti
Codice:
*(vett.elementi+vett.size)=pers;
andresti a lavorare sulla posizione 1 (invece di 0) dell'array, spazio che ancora non esiste.
Dovresti quindi semplicemente scrivere:
Codice:
vett.elementi = (struct Persona *)malloc(sizeof(struct Persona)*(vett.size+1));
Saluti.
jack_burton1985 è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2009, 15:58   #3
Abdujaparov
Senior Member
 
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
Ciao,
io ho provato a fare così:

Codice:
vett.elementi = (struct Persona *)realloc(vett.elementi,sizeof(struct Persona)*(++vett.size));
		*(vett.elementi+vett.size-1)=pers;
In questo modo sembra funzionare.
Grazie mille, ciao ciao.
Abdujaparov è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2009, 16:11   #4
jack_burton1985
Member
 
Iscritto dal: Mar 2008
Messaggi: 93
Funzionare funziona ma è concettualmente sbagliato (oltre a rendere poco leggibile il tuo codice): è inutile incrementare una variabile per poi usarne il valore -1.
Senza contare che così facendo incrementi la variabile contatore ben due volte nello stesso ciclo.
L'incremento va fatto quando DEVE essere fatto.
jack_burton1985 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
SONY BRAVIA 8 II e BRAVIA Theatre System 6: il cinema a casa in formato compatto SONY BRAVIA 8 II e BRAVIA Theatre System 6: il c...
KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo KTC H27E6 a 300Hz e 1ms: come i rivali ma a met&...
Sempre più IA su Spotify: arrivan...
iMac M4 crolla a 1.199€ con risparmio di...
Nintendo Switch 2: in rilascio un nuovo ...
Core Ultra 9 290K Plus, Core Ultra 7 270...
Prezzo Black Friday per le super cuffie ...
Crollano i prezzi della cuffie Beats col...
ASUS ROG Matrix RTX 5090 costa 4000 doll...
Grazie ai dati di ESA il calcolo della t...
Rilasciati nuovi video e immagini della ...
Gli astronauti cinesi di Shenzhou-20 son...
Mai così tanti gas serra: il 2025...
Google condannata in Germania: favorito ...
Ubisoft rimanda i risultati finanziari e...
ADATA porta i primi moduli DDR5 CUDIMM 4...
Bob Iger anticipa le novità AI di...
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: 12:12.


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