Torna indietro   Hardware Upgrade Forum > Software > Programmazione

AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-11-2006, 10:46   #1
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 980
[C] Realloc: Segmentation Fault

Ragazzi, ho un grave problema, sicuramente facile da identificare, ma io non ci riesco! Un programma che sto scrivendo mi va in seg.fault!

L'allocazione avviene tramite questa funzione:
Codice:
int Alloca_Memoria( CONTATTI **Ptr, int dim )
{
	CONTATTI *Nuovo_Ptr = NULL; /* nuovo puntatore... */
	/* ...che contiene il risultato della chiamata a realloc */
	Nuovo_Ptr = ( CONTATTI * )realloc( *Ptr, dim * sizeof( CONTATTI ) );

	if( Nuovo_Ptr == NULL )
	{
		/* realloc restituendo NULL ci avvisa che non c'e' memoria disponibile
		 * per allocare lo spazio richiesto */
		return (0);
	}
	else
	{
		/* l'allocazione ha avuto successo e si utilizza il nuovo indirizzo
		 * di memoria che contiene lo spazio necessario */
		Pausa();
		*Ptr = Nuovo_Ptr;
		return (1);
	}
}
Quando ci vado a scrivere:

Codice:
void Aggiungi_Contatto( CONTATTI **Rubrica, int *num_contatti )
{
	/* per lavorare sul numero dei contatti presenti in rubrica */
	int chiave = *num_contatti;
	
	/* se Alloca_Memoria restituisce 1 */
	if( Alloca_Memoria( Rubrica, chiave + 1 ) )
	{
		/* inserisci Contatto */
		Menu_Aggiungi_Contatto();
		/* assegnazione ID */
		Rubrica[chiave]->ID = chiave;
		
		SVUOTA_STDIN;
		printf( "Inserisci il nome: " );
		Inserisci_Stringa( Rubrica[chiave]->Nome );
		printf( "Inserisci il cognome: " );
		Inserisci_Stringa( Rubrica[chiave]->Cognome );
		
		chiave++;
		*num_contatti = chiave;
		Pausa();
	}
	else
	{
		printf("Impossibile aggiungere il contatto! Memoria non disponibile.\n");
		Pausa();
	}
		
}
La prima volta, quando (chiave == 0), la procedura funziona senza errori, appena si vuole scrivere un secondo contatto (chiave == 1) - sulla riga che ho evidenziato in grassetto, il programma va in Seg.Fault!

La cosa... (Gravissima) è che non riesco a capire il perchè!
__________________
Workstation: CPU AMD Ryzen 5900X @ 4950 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU AMD Radeon RX 9070 XT | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | B&W Px7 S3 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz FreeSync Premium
Starise è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2006, 10:57   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Starise
Codice:
Rubrica[chiave]->ID = chiave;
(*Rubrica)[chiave].ID = chiave;
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2006, 11:29   #3
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 980
Quote:
Originariamente inviato da andbin
(*Rubrica)[chiave].ID = chiave;
Grande! Funziona... il problema è che non capisco perchè usando la freccetta (->) non va!
__________________
Workstation: CPU AMD Ryzen 5900X @ 4950 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU AMD Radeon RX 9070 XT | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | B&W Px7 S3 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz FreeSync Premium
Starise è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2006, 11:48   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Starise
Grande! Funziona... il problema è che non capisco perchè usando la freccetta (->) non va!
Il problema non è tanto nella freccetta. Te lo spiego meglio:

Supponiamo che tu con malloc/realloc, allochi un certo numero di CONTATTI.
Codice:
+---------+
|         |  1000
+---------+
|         |  1010
+---------+
|         |  1020
+---------+
    ....
Non so quanto è grande CONTATTI, supponiamo 10. Nel mio esempio i contatti partono dall'indirizzo 1000.

Poi hai una variabile che tiene il puntatore a questi contatti, per esempio:
Codice:
+---------+
|  1000   |  2000
+---------+
Tu alla funzione Aggiungi_Contatto passi 2000, cioè l'indirizzo della variabile che tiene il puntatore ai contatti.
Quindi devi "indicizzare" il puntatore ai contatti che è (*Rubrica)[i] e non Rubrica[i]

Facendo ad esempio Rubrica[1], tu prenderesti il contenuto della cella all'indirizzo 2004. Cosa sbagliata, ovviamente.


EDIT Aggiungo questo: se ti chiedi perchè tu hai usato '->' mentre io il punto '.' è semplice. Rubrica[i] è un puntatore (hai dereferenziato solo 1 volta Rubrica) mentre (*Rubrica)[i] è già la struttura CONTATTI (ho dereferenziato 2 volte Rubrica) e quindi ci vuole il punto.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)

Ultima modifica di andbin : 03-11-2006 alle 12:10.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2006, 17:48   #5
Starise
Senior Member
 
L'Avatar di Starise
 
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 980
Grazie per le risposta, sei stato chiarissimo!
__________________
Workstation: CPU AMD Ryzen 5900X @ 4950 MHz | RAM Corsair DDR4 64GB @ 3.6GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 20 TB ~ HGST 7200RPM | PSU Fractal Ion+ 2 860W | GPU AMD Radeon RX 9070 XT | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | B&W Px7 S3 | Mic Oktava MK 012 Black | Display LG OLED 48" @ 2160p 120Hz FreeSync Premium
Starise è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Vast prosegue la costruzione della stazi...
Chiarito cosa è successo al satel...
Il TAR annulla Bologna Città 30. ...
Laptop con chip NVIDIA da marzo? Emergon...
Costruito in casa, più veloce di ...
Il nuovo Galaxy Book 6 Pro costa il 25% ...
C'è un boom del mercato dei data ...
OVHcloud annuncia la disponiiblità...
Il Wi-Fi 7 ha un nuovo re: da ASUS arriv...
In arrivo l'auto "Frankenstein"...
Chip NVIDIA H200 in Cina? 'Come vendere ...
iPhone 16 torna super conveniente: ora c...
Offerte Amazon pazzesche: tech, smartpho...
Ubisoft annuncia l'arrivo dei 60 fps per...
Infratel Italia: ecco la nuova mappa del...
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: 04:41.


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