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.