PDA

View Full Version : [C] puntatore a struct il cui campo è doppio puntatore


dvd100
27-11-2009, 18:25
Salve a tutti
non riesco a capire come mai questo codice vada in Segmentation fault :(


typedef struct culture_ {
char** matr;
} culture;

void main() {
culture *test;
test->matr = NULL;
}

Se faccio così

void main() {
culture test;
test.matr = NULL;
}

tutto funziona, ma ho bisogno di un puntatore struttura.. come si fa in questi casi?
Grazie!

gugoXX
27-11-2009, 18:32
Salve a tutti
non riesco a capire come mai questo codice vada in Segmentation fault :(


typedef struct culture_ {
char** matr;
} culture;

void main() {
culture *test;
test->matr = NULL;
}

Se faccio così

void main() {
culture test;
test.matr = NULL;
}

tutto funziona, ma ho bisogno di un puntatore struttura.. come si fa in questi casi?
Grazie!

Il problema non e' (per ora) il doppio puntatore.
Il problema e'... lo spazio allocato.
Quel puntatore a struttura, punta a cosa?

maulattu
27-11-2009, 18:46
Salve a tutti
non riesco a capire come mai questo codice vada in Segmentation fault :(


typedef struct culture_ {
char** matr;
} culture;

void main() {
culture *test;
test->matr = NULL;
}

Se faccio così

void main() {
culture test;
test.matr = NULL;
}

tutto funziona, ma ho bisogno di un puntatore struttura.. come si fa in questi casi?
Grazie!
come giustamente suggerito da gugoxx devi allocare una variabile di tipo struct culture *
test è un puntatore, ma non punta attualmente a nulla di valido
culture *test = (struct culture *) calloc(1, sizeof(struct culture));
if (NULL != test)
{
test->matr = NULL;
...
...
free(test);
}

dvd100
27-11-2009, 18:54
avete ragionissima, ci vuole


test = (culture*) malloc( sizeof(culture*) );


in effetti era ovvio ma oggi sono abbastanza fuso :D

Grazie della dritta :)

maulattu
29-11-2009, 15:24
dopo la malloc fai un memset a 0, cvosì ripulisci l'intero contenuto del valore puntato.
o, se vuoi, vai di calloc