C 2次元配列のメモリの静的確保について malloc

実現したいこと

C言語,2次元配列にて,アドレスが連続したメモリを確保したいです.

発生している問題・分からないこと

連続したメモリを確保する際,いろいろなやり方があると思いますが,
以下の2つは何が違うのか?違わないなら,2つ目の方が効率がいいのでは?という疑問です.

・1つ目はmatrixに100のメモリを確保し,base_matrixに100 * 100のメモリを確保し,matrix[i]に,100毎のbase_matrixを当てはめていく.
・2つ目は,matrixに100 * 100のメモリを確保する.

という違いだと認識しています.
ポインタについての理解が浅いので,もしかしたら前提の認識が間違っているかもしれません.

該当のソースコード

#include <stdio.h> #include <stdlib.h> int main() { int **matrix, *base_matrix; int i, j, n, m; n = 100, m = 100; matrix = malloc(sizeof(int *) * n); base_matrix = malloc(sizeof(int) * n * m); for (i=0;i<n;i++) { matrix[i] = base_matrix + i * m; } return 0; }
#include <stdio.h> #include <stdlib.h> int main() { int **matrix int i, j, n, m; n = 100, m = 100; matrix = malloc(sizeof(int) * n * m) return 0; }

試したこと・調べたこと

上記の詳細・結果

エラーなどはどちらにも確認できませんでした.
なお,上記のコードでは無駄な部分は省いています.

補足

特になし

コメントを投稿

0 コメント