#include <stdio.h>
#include <stdlib.h>
int main(void) {
int rows = 3; // 行数
int cols = 4; // 列数
int i, j;
// --- Step 1: ポインタの配列(行)を確保 ---
int **a
= (int **)malloc(sizeof(int *) * rows
); if (a == NULL) return 1;
// --- Step 2: 各行に実データ(列)の領域を確保 ---
for (i = 0; i < rows; i++) {
a
[i
] = (int *)malloc(sizeof(int) * cols
); if (a[i] == NULL) return 1;
}
// 値の代入と表示の例
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
a[i][j] = i * cols + j;
}
}
// メモリの解放(確保と逆の順番で解放する)
for (i = 0; i < rows; i++) {
free(a
[i
]); // Step 2で確保した分を解放 }
free(a
); // Step 1で確保した分を解放
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBtYWluKHZvaWQpIHsKICAgIGludCByb3dzID0gMzsgLy8g6KGM5pWwCiAgICBpbnQgY29scyA9IDQ7IC8vIOWIl+aVsAogICAgaW50IGksIGo7CgogICAgLy8gLS0tIFN0ZXAgMTog44Od44Kk44Oz44K/44Gu6YWN5YiX77yI6KGM77yJ44KS56K65L+dIC0tLQogICAgaW50ICoqYSA9IChpbnQgKiopbWFsbG9jKHNpemVvZihpbnQgKikgKiByb3dzKTsKICAgIGlmIChhID09IE5VTEwpIHJldHVybiAxOwoKICAgIC8vIC0tLSBTdGVwIDI6IOWQhOihjOOBq+Wun+ODh+ODvOOCv++8iOWIl++8ieOBrumgmOWfn+OCkueiuuS/nSAtLS0KICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICBhW2ldID0gKGludCAqKW1hbGxvYyhzaXplb2YoaW50KSAqIGNvbHMpOwogICAgICAgIGlmIChhW2ldID09IE5VTEwpIHJldHVybiAxOwogICAgfQoKICAgIC8vIOWApOOBruS7o+WFpeOBqOihqOekuuOBruS+iwogICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAgIGZvciAoaiA9IDA7IGogPCBjb2xzOyBqKyspIHsKICAgICAgICAgICAgYVtpXVtqXSA9IGkgKiBjb2xzICsgajsKICAgICAgICAgICAgcHJpbnRmKCIlMmQgIiwgYVtpXVtqXSk7CiAgICAgICAgfQogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KCiAgICAvLyDjg6Hjg6Ljg6rjga7op6PmlL7vvIjnorrkv53jgajpgIbjga7poIbnlarjgafop6PmlL7jgZnjgovvvIkKICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICBmcmVlKGFbaV0pOyAvLyBTdGVwIDLjgafnorrkv53jgZfjgZ/liIbjgpLop6PmlL4KICAgIH0KICAgIGZyZWUoYSk7ICAgICAgICAvLyBTdGVwIDHjgafnorrkv53jgZfjgZ/liIbjgpLop6PmlL4KCiAgICByZXR1cm4gMDsKfQ==