Genius7115: il tuo intervento ha un non so che di inutilmente tragico per una cosa semplicissima.. :quipy:
Figurehead, se i puntatori devono puntare a strutture gia` esistenti, c`e` prima di tutto un errore di fondo in cio` che hai scritto:
malloc (sizeof(root)*numcontatti)
dove "root" è una struttura di tipo "contatto" e "numcontatti" è la variabile che indica il numero di strutture allocate.
Questo deve essere:
codice:
malloc( sizeof( root* ) * numcontatti );
Ricorda che e` un array di puntatori, non di strutture..
bDaniele accennava ad una lista, ma Figurehead mi e` parso chiedesse un array, anche se, a dire il vero, per una cosa del genere una lista sarebbe molto migliore, forse.
Cmq ho scritto un codicino che riproduce quello che tu devi fare (per quanto ho capito):
codice:
#include <stdio.h>
#include <stdlib.h>
#define ELEMENTI 3
typedef struct
{
int campoA;
char campoB;
} struttura;
int main( int argc, char* argv[] )
{
struttura strutture[ ELEMENTI ] = { { 1, 'a' }, { 2, 'b' }, { 3, 'c' } };
unsigned i;
struttura** array = ( struttura** ) malloc( sizeof( struttura* ) * ELEMENTI );
for( i = 0; i < ELEMENTI; i++ )
{
array[ i ] = &strutture[ i ];
printf( "struttura[ %u ]: %d %c\n", i, strutture[ i ].campoA, strutture[ i ].campoB );
printf( "array[ %u ] : %d %c\n", i, array[ i ]->campoA, array[ i ]->campoB );
}
free( array );
return 0;
}
Come vedi ho allocato delle 'strutture' (statiche) e poi le ho fatte puntare da un 'array' di puntatori a strutture, allocato con malloc().
Se ti risulta intricato ri-posta qui.
Figurehead, non "evitare" i puntatori. Ti potranno tornare utili in innumerevoli casi. E poi se non ti piacciono .. tanto vale che usi Java. :tongue:
Ciao.