[
All'interno di un'altra funzione ho dichiarato
int **M;
Forse non funziona perchè lo hai dichiarato nel posto sbagliato

Ho fatto un programmino velocissimo che funziona

Codice PHP:
int **function(int **matrice)
{
int i,y;  
 for(
i=0;i<10;i++)
  {
    for(
y=0;y<10;y++)
     {
      
matrice[i][y]=y;   
     }
  }
return 
matrice;
}

int main()
{
   
int **pippo=NULL,i,**pluto=NULL,y;
   
   
pippo=(int **)malloc(sizeof(int*)*10);

   for(
i=0;i<10;i++)
    
pippo[i]=(int *)malloc(sizeof(int)*10);
   
   
pluto=function(pippo);
  
   
printf("%d\n\n",pluto[0][0]);   
  
   
   
system("PAUSE");
   return 
EXIT_SUCCESS;

L'accesso all elemento pluto[0][0] non genera alcun errore.

Magari se posti il tuo codice, cerchiamo di risolvere la magagna (io però ci darò un occhiata domani perchè ora esco dall'ufficio!! )