Casino coi puntatori

di il
1 risposte

Casino coi puntatori

Salve, ho un programma che non funge per segmentation fault... vi presento la situazione dei puntatori e mi dite se qualcosa ad occhio non vi torna...

ho una struct 'scheda'. Ho un puntatore a un array passato come argomento della funzione:

scheda** psarray[];

Nella funzione ho queste dichiarazioni:

scheda* albero;
*psarray = (scheda_t**) calloc(30,sizeof(scheda_t*));

dopodiche' ho un ciclo con un contatore n=0 che aumenta di uno ogni volta che inserisco un elemento di tipo scheda nel psarray. Le stringhe incriminate sono queste:

if ( scheda != NULL) {
*psarray[n] = albero;
n++;
}

E qui, al secondo assegnamento (cioe' quando n=1) mi da' segmentation fault. Cosa sbaglio?

Preciso che a ogni passo del ciclo l' elemento albero di tipo scheda viene creato con una funzione apposita che alloca memoria e ritorna un elemento di tipo scheda*.

EDIT: credo sia un problema di psarray e dell'allocazione con la calloc visto che se faccio la stessa cosa con un array nello stack non da' problemi.

1 Risposte

  • Re: Casino coi puntatori

    Dunque, hai la situazione del tipo:
    
    scheda **array[];
    
    Equivalente nel tuo caso a:
    
    scheda ***array;
    
    ( Poi sembra che tu non inizializzi array, ma usi subito il primo elemento che NON hai allocato )
    Tralasciando la precisazione di prima, quindi *array è del tipo (scheda **) che allochi per 30 posti.. *array[0] .. *array[29] ognuno di questi ( *array ) è del tipo (scheda *) a cui tu associ l'elemento albero che è anch'esso di tipo (scheda *) e penso che tu lo inizializzi da qualche parte.

    Quindi riassumendo credo che l'errore sia nel non inizializzare "array"
Devi accedere o registrarti per scrivere nel forum
1 risposte