E' quasi perfetto ... manca la liberazione della memoria e il controllo dell'allocazione ...

codice:
int main() {
    int v1[10]={2,4,11,6,17,1,24,4,45,3};
    int i=0;
    int dim=0;
    int *p;
    p=elabora(v1,&dim);
    for (i=0;i<dim;i++)
	printf("%d ",p[i]);

    if(p) free(p);

    system("PAUSE");
    return 0;
}

int* elabora(int v1[], int *dim) {
     int *v2;
     int i,N=0;
     for (i=0;i<10;i++)
          if(v1[i]>5) 
                    N++;
     v2=(int *) malloc (N*sizeof(int));
     if(v2)
     {
	for (i=0;i<10;i++)
           if(v1[i]>5) 
	   {
	        v2[*dim]=v1[i]; 
                (*dim)++;
           }
     }

     return v2;
}