agosteeno
26-03-2010, 11:15
Salve a tutti, nn riesco a capire come funziona (o far funzionare) il fatto che a un doppio puntatore possa essere assegnato un array di puntatori. La situazione e' questa:
Ho una struttura definita come list_t. Io voglio creare una funzione per definire in un'altra struttura hash_t un array di puntatori a list_t grande size, dove size e' un parametro della funzione. IMPORTANTE La list_t manipola dati di tipo void *
mi viene da scrivere una cosa del genere:
typdef struct {
list_t **pun;
...
}hash_t;
hash_t * funz(... int size, ...)
{
hash_t * tmpH;
list_t ** tmpL;
tmpH = malloc(sizeof(hash_t));
...
tmpL = calloc(size, sizeof(list_t *));
tmpH->pun = tmpL;
return tmpH;
}
uso la calloc perche' la memoria cosi' allocata mi serve formattata.
Il problema e' che io vorrei accedere a pun come se fosse un array, quindi con la notazione pun[i], ma anche se il compilatore me lo fa' fare nn accedo ai membri.
Ho provato a scrivere
list_t *tmpL[size];
ma nn so' come effettuare la malloc...
Penso che il compilatore nn faccia storie perche' i dati dentro list_t sono void *.
Nn so' come risolvere il problema.
Ho una struttura definita come list_t. Io voglio creare una funzione per definire in un'altra struttura hash_t un array di puntatori a list_t grande size, dove size e' un parametro della funzione. IMPORTANTE La list_t manipola dati di tipo void *
mi viene da scrivere una cosa del genere:
typdef struct {
list_t **pun;
...
}hash_t;
hash_t * funz(... int size, ...)
{
hash_t * tmpH;
list_t ** tmpL;
tmpH = malloc(sizeof(hash_t));
...
tmpL = calloc(size, sizeof(list_t *));
tmpH->pun = tmpL;
return tmpH;
}
uso la calloc perche' la memoria cosi' allocata mi serve formattata.
Il problema e' che io vorrei accedere a pun come se fosse un array, quindi con la notazione pun[i], ma anche se il compilatore me lo fa' fare nn accedo ai membri.
Ho provato a scrivere
list_t *tmpL[size];
ma nn so' come effettuare la malloc...
Penso che il compilatore nn faccia storie perche' i dati dentro list_t sono void *.
Nn so' come risolvere il problema.