main()
ブロックで宣言された 2D ジャグ配列があります。これは関数に渡され、メモリが割り当てられます。以下は、コンパイルはできるが実行時にクラッシュする最も縮小されたケースです。どこが間違っていますか?
#include <stdio.h>
#include <stdlib.h>
void alloc2d(double ***p);
int main () {
double **data;
alloc2d(&data);
printf("Before assign to data\n");
data[0][0] = 0.1;
printf("After assign to data\n");
free(data);
}
void alloc2d(double ***p) {
int i, n, m;
// Get some dynamically assigned sizes
printf("Enter size: ");
scanf("%d %d", &n, &m);
// Now allocate
*p = malloc(n * sizeof(double*));
for (i = 0; i < n; i++) {
*p[i] = malloc(m * sizeof(double));
}
printf("End of alloc2d\n");
}
これは値を読み取りますが、小さい数値 (つまり「1 1」) を入力するとクラッシュしますが、大きい数値 (つまり「10 10」) を入力するとクラッシュします。