このint a[N][N] のような 2D 配列を割り当てると、連続したメモリ ブロックを割り当てます。
しかし、次のように動的に実行しようとすると:
int **a = malloc(rows * sizeof(int*));
for(int i = 0; i < rows; i++)
a[i] = malloc(cols * sizeof(int));
これにより、行内の要素間の単位ストライドが維持されますが、行間ではそうではない場合があります。
1つの解決策は2Dから1Dに変換することですが、それ以外にそれを行う別の方法はありますか?