2次元の多量の要素をもつ変数を扱いたくて、配列ではなくポインタのポインタを用いてメモリを確保・解放しようとしています。
各要素はint型で、配列で書くと
p[2003][18]
に相当するのですが、次の(1)、(2)のどちらがよいのかわからなくなりました。
この処理を含むプログラム全体は大きく、実行すると途中で終了してしまいます。メモリ破壊が起こっているような気がします。
なお、
int **p, i;
とします。
C
1(1) 2// pのメモリの確保 3p = (int **)malloc(sizeof(int) * 2004); 4if (p == NULL) { 5 printf("メモリが確保できません。\n"); 6 return 1; 7} 8for (i = 0; i < 2004; i++) { 9 p[i] = (int *)malloc(sizeof(int) * 19); 10 if (p[i] == NULL) { 11 printf("メモリが確保できません。\n"); 12 return 1; 13 } 14} 15// pのメモリの解放 16for (i = 0; i < 2004 ;i++) 17 free(p[i]); 18free(p); 19 20(2) 21// pのメモリの確保 22p = (int **)malloc(sizeof(int) * 19); 23if (p == NULL) { 24 printf("メモリが確保できません。\n"); 25 return 1; 26} 27for (i = 0; i < 19; i++) { 28 p[i] = (int *)malloc(sizeof(int) * 2004); 29 if (p[i] == NULL) { 30 printf("メモリが確保できません。\n"); 31 return 1; 32 } 33} 34// pのメモリの解放 35for (i = 0; i < 19 ;i++) 36 free(p[i]); 37free(p); 38
紙に配列のようにして書いて考えてみましたが、どうしても分かりません。ご教授いただきたく、お願いいたします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/15 08:04
2022/05/15 11:18 編集
2022/05/15 14:12 編集
2022/05/16 01:41
2022/05/17 02:34
2022/05/17 08:35
2022/05/17 08:55
2022/05/17 12:56
2022/05/17 12:59
2022/05/17 13:00
2022/05/17 13:03
2022/05/18 09:25
2022/05/19 05:53
2022/05/19 05:59
2022/05/19 06:06
2022/05/19 13:41