宿題がだされました。おながいします。

次のように行列のスペースを確保して
int i;
double **A;
A = calloc( 10, sizeof(double *) );
for( i=0; i<10; ++i )
A[i] = calloc( 10, sizeof(double) );

あとから行列Aを解放するとき、
for( i=0; i<10; ++i )
free(A[i]);
free(A);

と各行ごとにfree(A[i])として解放する必要はありますか?
それとも各行ごとにfreeしなくても、free(A)とするだけで、
各行ごとに確保したメモリも解放されますか?

free(A)だけした直後にusleep(10000000)してtopでプログラムの
メモリの消費量をみていると、各行ごとにfree(A[i])しなくても
メモリは解放されているような気もします。