comment libérer c 2d tableau

j'ai le code suivant:

int **ptr = (int **)malloc(sizeof(int*)*N); 
for(int i=0;i<N;i++) 
     ptr[i]=(int*)malloc(sizeof(int)*N));

comment puis-je gratuit ptr à l'aide de free? dois-je en boucle sur le ptr et gratuit ptr[i]? ou tout simplement faire

free(ptr) 

et le ptr sera libéré?

source d'informationauteur lina