codice:
void alloca(int**& q,int d)
{
     cout<<"funzione alloca \n ";
     q=(int**)new int[d];
     for(i=0;i<d;i++)
     {
                     q[i]=(int*)new int[d];
     }
}
Così viene passato il riferimento a quel puntatore e non ci sono problemi.
Inoltre ricordo a pipporossonero che le cose allocate con new[] vanno liberate con delete[] e non con delete.
hai perfettamente ragione sul delete mea culpa, concordo con l'utilizzo dei reference nella funzione alloca ma se stessimo scrivendo in C e non in C++, il mio codice utilizzando i tripli puntatori e passando per indirizzo non sarebbe l'unica via percorribile ( e se si dove ho sbagliato ? )...grazie per la risposta !