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 :(
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 :(