Ciao!
Ho un piccolo problema, ve lo scrivo con un tratto di codice
codice:
        /* Struttura */
typedef struct lezioni lessons;

struct lezioni{
    int num;
    lessons *next;
    };

        /* Prototipi */
lessons *getfile(lessons *les, int **vet);
int *studentsalloc(int nstudents);


int main (void){
    int *vet; //un vettore che voglio allocare dinamicamente
    lessons *les;
    les = getfile(les, &vet);
    return 0; 
}

lessons *getfile(lessons *les, int **vet){
    FILE *fo; //file open
    char name[M_LENGTH]; //le dimensioni sono costanti che ho tralasciato in questo messaggio
    char filename[M_LENGTH];
int n;

    /* In questo tratto di codice carico con una fopen un file,
prendo la prima riga dove c'è scritto il numero di studenti, 
che sarà la dimensione del mio vettore. Qui ho tralasciato questa parte */

        *vet = studentsalloc(nstudents); 
/*quando mi fa il return, l'indirizzo di vet non viene cambiato,
rimane esattamente così com'era prima*/
        return les;
    }

int *studentsalloc(int nstudents){
    int *n = NULL;
    n = (int *) malloc (nstudents*sizeof(int));
    return n; 
    }
come scritto, il mio problema è che caricando un vettore da allocare dinamicamente in una funzione, per poi caricarlo di nuovo in un altra funzione, l'indirizzo non è cambiato. Allora ho pensato che ci volesse un riferimento di riferimento, ovvero:

codice:
 /* Prototipi */
lessons *getfile(lessons *les, int **vet);
int **studentsalloc(int nstudents);

[...]

lessons *getfile(lessons *les, int **vet){
   [...]
int n;
        vet = studentsalloc(nstudents); /* tolgo un asterisco */
        return les;
    }

int **studentsalloc(int nstudents){ 
    int *n = NULL;
    n = (int *) malloc (nstudents*sizeof(int));
    return n;  /* ora mi dice Return from incompatible pointer type */
    }
se provo con il debug, vedo che l'indirizzo di vet viene modificato con quello di n, come voglio io, ma se provo ad accedere a un parte di memoria di vet, per esempio mettendo un 5 in *(vet+1), e facendo la printf mi viene SIGSEGV...

devo per forza fare un cast a quel return n?
sto impazzendo, la logica dei puntatori mi è piu o meno chiara, sto studiando sodo :master: