for(i=-(cols/2);i=((cols/2)-1);i++) //errato
for(i=-(cols/2);i==((cols/2)-1);i++) //giusto
for(i=0;i<a;a++)//errato
for(i=0;i<a;i++)//giusto
**radius=(double**)malloc(sizeof(double*)*rows);
radius[k]=(double*)malloc(sizeof(double*)*cols);
ma per fortuna che il compilatore non si è ancora ubriacato.
è poi errato allocare memoria di un puntatore passato(non me ne ero accorto prima),in questo caso lo devi passare come *** perchè vuoi accedere alla variabile e non alla sua copia,ti ricordo che:
void funzione (int *val);
crea un nuovo puntatore che punta alla stessa area di memoria della variabile passata,se vuoi puntare direttamente alla memoria della variabile diventa:
void funzione (int **val);
nel tuo caso:
void pre_filter_Computations(double ***radius,double ***theta,int cols,int rows)
Per non diventare psicopatico nella gestione del triplo puntatore ti conviene fare cosi:
void pre_filter_Computations(double ***radius,double ***theta,int cols,int rows)
{
double **rad;
double **the;
//uso rad e the al posto di radius e theta.
// alla fine:
*radius=rad;
*theta=the;
}
dimenticavO:
naturalmente dovrai passare tutto per indirizzo:
double **a=NULL;
double **b=NULL;
pre_filter_Computations(&a,&b,3,3);