サイズの変わる2次元配列を動的に確保したいんですが、
処理を繰り返すとfreeに失敗します。
数回 "free(): invalid pointer"というメッセージがでて、セグメンテーション違反で終了します。
以下のソースの何がおかしいんでしょう。

int **array;

array = (int **)malloc( size_y * sizeof(int *));
for(i = 0; i < size_y; i++){
array[i] = (int *)malloc(size_x * sizeof(int));
}
...
for(i = 0; i < size_y; i++){
free(array[i]);
}
free(array);