fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main() {
  5. int i, j;
  6. int a = 3, b = 3; // 行数a、列数bを固定(例として3x3の配列)
  7. int **mat;
  8.  
  9. // 2次元配列の動的確保
  10. mat = (int**)malloc(sizeof(int*) * a); // 行のためのメモリ確保
  11. if (mat == NULL) {
  12. printf("Memory allocation failed!\n");
  13. return 1;
  14. }
  15.  
  16. // 各行に対して列のためのメモリ確保
  17. for (i = 0; i < a; i++) {
  18. mat[i] = (int*)malloc(sizeof(int) * b); // 列のメモリ確保
  19. if (mat[i] == NULL) {
  20. printf("Memory allocation failed!\n");
  21. return 1;
  22. }
  23. }
  24.  
  25. // 1から9までの数値を2次元配列に代入
  26. int num = 1; // 数値は1からスタート
  27. for (i = 0; i < a; i++) {
  28. for (j = 0; j < b; j++) {
  29. mat[i][j] = num++; // numを代入してからインクリメント
  30. }
  31. }
  32.  
  33. // 配列の内容を表示
  34. for (i = 0; i < a; i++) {
  35. for (j = 0; j < b; j++) {
  36. printf("%d ", mat[i][j]);
  37. }
  38. printf("\n");
  39. }
  40.  
  41. // メモリの解放
  42. for (i = 0; i < a; i++) {
  43. free(mat[i]); // 各行に対して解放
  44. }
  45. free(mat); // 行のポインタ自体を解放
  46.  
  47. return 0;
  48. }
  49.  
Success #stdin #stdout 0s 5264KB
stdin
2 3
stdout
1 2 3 
4 5 6 
7 8 9