Quote:
Originariamente inviato da !Matrix!
Qualcuno mi può aiutare a trovare gli errori nel codice visto che sto imparando ora ad utilizzare il C e quindi non riesco a capire cosa ho sbagliato..Grazie in anticipo per l'aiuto! 
|
Ciao, ci sono diverse cose che non vanno, in particolare nella funzione
crea():
1) Il puntatore
ptrs non è inizializzato. Non devi soltanto allocare memoria per
ptrs->ptr ma anche per
ptrs stesso!
2) Hai messo un
else printf("Memoria ..."); ma attenzione che quel else è associato al
if(vett[i]%2==0) e non al primo if che testa il puntatore (come sarebbe invece logico). In generale un else è sempre associato al if più vicino in ordine ascendente.
3) Alla fine fai un
ptrs->dim=j-1; ma non devi decrementare
j di 1! La variabile j ha già il numero giusto di elementi.
La funzione crea si potrebbe quindi riscrivere così:
Codice:
datirestituiti *crea (int vett[],int dim)
{
datirestituiti *ptrs;
int i;
int j=0;
ptrs = (datirestituiti *) malloc (sizeof (datirestituiti));
if (ptrs == NULL)
return NULL;
ptrs->ptr = (int *) malloc (dim*sizeof(int));
if (ptrs->ptr == NULL)
{
free (ptrs);
return NULL;
}
for(i=0; i<dim; i++)
if(vett[i]%2==0)
ptrs->ptr[j++]=vett[i];
ptrs->dim=j;
return ptrs;
}
Nel main dovresti quindi testare innanzitutto se il puntatore restituito dalla funzione crea è NULL (e in quel caso stampi l'errore ed esci).
Se il puntatore non è NULL devi poi fare alla fine la free di
ptr->ptr e poi di
ptr.
Inoltre ti segnalo che fare
ptrs->ptr[j] è la stessa cosa (ma più leggibile) di
*(ptrs->ptr+j).
Usando la malloc dovresti includere anche stdlib.h, per correttezza.