mi sono limitato a farlo funzionare col tuo codice ed ho separato le due funzioni!
Cmq l'errore era sostanzialmente qui:
Codice:
ptrs->ptr =(int *) malloc (dim*sizeof(int));
non puoi fare questo se
ptrs ancora non esiste...quindi ho aggiunto:
Codice:
datirestituiti *ptrs=(datirestituiti *) malloc (sizeof(datirestituiti));
Ecco il risultato:
Codice:
#include <stdio.h>
#define N 30
typedef struct
{
int *ptr;
int dim;
} datirestituiti;
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;
}
int main ()
{
int n;
int vett[N];
int i;
datirestituiti *ptr;
do{
printf("Quanti numeri vuoi inserire nel vettore?");
scanf("%d",&n);
}while((n<0)||(n>30));
for(i=0; i<n; i++)
{
printf("Inserisci il numero:");
scanf("%d",&vett[i]);
}
ptr = crea(vett,n);
printf("I numeri pari inseriti sono: ");
for (i=0; i<=ptr->dim; i++)
printf("%d, ",*(ptr->ptr+i));
printf("\n\n");
system("pause");
}