View Single Post
Old 16-01-2006, 10:19   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da leadergl
Codice:
datirestituiti * crea(int vett[],int dim) 
{ 
    datirestituiti *ptrs=(datirestituiti *) malloc (sizeof(datirestituiti));
    int i; 
    int j=0; 
    
    ptrs->ptr =(int *) malloc (dim*sizeof(int));    
    
    if(ptrs->ptr!=NULL) 
    {
        for(i=0; i<dim; i++) 
            if(vett[i]%2==0) 
            {
                *(ptrs->ptr+j)=vett[i]; 
                j++;
            } 
    }else printf("Memoria non disponibile!\n"); 
    
    ptrs->dim=j-1; 
    
    return ptrs; 
}
Il tuo codice è giusto per quanto riguarda le allocazioni ma è anche necessario testare il risultato delle allocazioni in modo corretto!

Normalmente quando una funzione effettua più allocazioni in sequenza come sopra e deve restituire un puntatore, la soluzione migliore è un controllo del tipo o tutto/o niente. Cioè se tutte le allocazioni vanno ok, allora fa quel che deve fare e restituisce il puntatore valido. Se una allocazione fallisce, non deve usare i puntatori, deve liberare quello che eventualmente aveva già allocato e restituire NULL.
Sarà poi il chiamante a decidere cosa fare. Questa (secondo la mia opinione) è la soluzione migliore.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso