Salve a tutti,ho questo dubbio su una funzione che è allo stesso tempo una procedura ma ha anche un valore di ritorno.
Ho scritto una funzione che legge una struttura da file,la struttura è questa:
codice:
typedef struct
{
    int data [4];
    char *oggetto;
    char *testo;
}nota;
Nel file ci saranno elementi ordinati separati da newline,ecco un esempio:
codice:
4
4
4
4
ciao
ciao
Questa funzione deve leggere i valori dal file,allocare n strutture e ogni struttura contiene i valori letti da file.Ad esempio se nel file ci sono 12 righe+1 (significa che ci sono scritte 2 strutture),alloca 2 strutture e ritorna come valore il numero di strutture allocate.
Ho testato la funzione,e pare che se all' interno della funzione provo a stampare tutti i valori letti me li stampa pure,ma se provo a farlo all' interno del main mi stampa numeri casuali grandissimi.
Sembrerebbe che anche se ha l' effetto di allocare n strutture già contenenti valori,quest' effetto non viene prodotto.
Questo è il codice della funzione:
codice:
int nota_read(FILE*fp,nota *ptr)
{
    char *p;
    int i,k=0;
    if(num_line(fp)==0)
      ptr=NULL;
    else
      ptr=(nota*)calloc((num_line(fp)/6),sizeof(nota));
    while(cur_line(fp)<num_line(fp))
    {
        for(i=0;i<4;i++)
        {
            p=get_string(fp,p);
            (ptr[k]).data[i]=atoi(p);
            free(p);
        }
        (ptr[k]).oggetto=get_string(fp,(ptr[k]).oggetto);
        (ptr[k]).testo=get_string(fp,(ptr[k]).testo);
        k++;
    }
    free(p);
    return num_line(fp)/6;
}
Se nel main provo a scrivere:
codice:
int main()
{
    nota *ptr;
    FILE *fp;
    fp=fopen("dati.txt","r");
    nota_read(fp,ptr);
    printf("%d",ptr[0].data[0]);          // e' un esempio per testare la funzione;
    fclose(fp);
    free(ptr);
    return 0;
}
Mi stampa un numero negativo,cosa potrebbe essere?