PDA

View Full Version : [C] Allocazione dinamica: Array di puntatori a strutture


Starise
27-10-2006, 19:22
Ciao a tutti!
Sono un po' confuso riguardo un paio di cosette e spero che possiate aiutarmi a chiarire le idee! Innanzitutto ho realizzato una struttura di questo tipo:
typedef struct _Contatti
{
unsigned int ID;
char Nome[LSTRING];
char Cognome[LSTRING];

/* Altri dati */
LISTA Telefono;
LISTA Fax;
LISTA Cellulare;
}CONTATTI;int main()
{
/* Dichiaro un puntatore ad una locazione che può contenere
una struttura di tipo CONTATTI, giusto? */
CONTATTI *Array = NULL;
int contatti = 1;
Alloca_Memoria( &Array, &contatti );
}Adesso, la function Alloca_Memoria, deve la memoria, poco alla volta, a seconda di quanto si incrementa 'contatti', cominciando da uno!
void Alloca_Memoria( CONTATTI *_Ptr, int *dim )
{
_Ptr = ( CONTATTI * )realloc( _Ptr, (*dim) * sizeof( CONTATTI ) );
} Cosi però non funziona, compila ma il programma si blocca!
void Alloca_Memoria( CONTATTI **_Ptr, int *dim )
{
*_Ptr = ( CONTATTI * )realloc( *_Ptr, (*dim) * sizeof( CONTATTI ) );
} Cosi invece funziona, alloca la memoria, ma pare comunque non andar bene, perchè io alloco solo lo spazio x un elemento, però quando vado a scrivere dentro l'array, riesco a scrivere dei dati anche negli elementi successivi al primo! Poi non ho capito perchè in ingresso vuole un **_Ptr invece di un semplice *_Ptr

Scusate, magari sono cose stupide, però non riesco a uscirne :(

Fenomeno85
27-10-2006, 19:28
uno non passare la dimensione come puntatore che non è il massimo della logica .. ok tutto ma non è che se hai scoperto i puntatori devi usare tutte le variabili come puntatore :D

e poi quando passi Array non devi mettere il &

~§~ Sempre E Solo Lei ~§~

Starise
27-10-2006, 19:54
e poi quando passi Array non devi mettere il & Ma io mica l'ho dichiarato come array. L'ho dichiarato come puntatore.

Fenomeno85
27-10-2006, 19:57
Ma io mica l'ho dichiarato come array. L'ho dichiarato come puntatore.

Array il nome della variabile non il tipo array :D

~§~ Sempre E Solo Lei ~§~

Paco De Luciaaaaa
27-10-2006, 20:00
Ma scusa se alla chiamata passi il puntatore a un puntatore è ovvio che poi nella provedura devi accerderci con **_ptr.

Cmq trattandosi di un puntatore passalo senza l'operatore & nella chiamata e nella funzione lo richiami con *_ptr.


Mi sa che hai fatto un pò di confusione con i puntatori ;) ripassali

lovaz
28-10-2006, 18:26
Ma io mica l'ho dichiarato come array. L'ho dichiarato come puntatore.
(nomi di) array e puntatori sono praticamente la stessa cosa in C

Aspetto smentite...

Fenomeno85
28-10-2006, 18:29
(nomi di) array e puntatori sono praticamente la stessa cosa in C

Aspetto smentite...

nessuna smentita è corretto ciò che dici ;)

~§~ Sempre E Solo Lei ~§~

zakmckraken
28-10-2006, 19:43
Ciao a tutti maaa... riguardo al fatto di scrivere in aree di memoria non inizializzate che io sappia in C/C++ puoi scrivere ovunque tu voglia, sta al programmatore stare attento e limitarsi :P

Zak (& mostly the Alien Mindbender)

Fenomeno85
28-10-2006, 20:04
Ciao a tutti maaa... riguardo al fatto di scrivere in aree di memoria non inizializzate che io sappia in C/C++ puoi scrivere ovunque tu voglia, sta al programmatore stare attento e limitarsi :P

Zak (& mostly the Alien Mindbender)

si un paio di zebedei :D

una cosa è scrivere così tanto per fare cacchiate ... altre è programmare :D

~§~ Sempre E Solo Lei ~§~