初心者質問スマソ

char **array=(char**)malloc(sizeof(char *)*a);

for(i=0;i<a;i++){

array[i]=malloc(sizeof(char)*a);

}

このように動的に2次元配列を得たとき、
割り当てた全てのメモリを開放するには
free(array);でいいのですか?
(このように書かれたページがあったのですが)