有谁知道如何在C中填充二维(动态)数组? 我有这个:
double** A;
A = ( double** )malloc( 2*sizeof( double* ));
for (int i = 0; i < 2; i++ ) A[i] = ( double* )malloc( 3 );
A[0][0] = 1;
A[0][1] = 2;
A[0][2] = 3;
A[1][0] = 4;
A[1][1] = 5;
A[1][2] = 6;
printf("%d", A[1][1]);
但它只打印了我......:/
有人帮忙吗? THX:)
答案 0 :(得分:3)
这
for (int i = 0; i < 2; i++ ) A[i] = ( double* )malloc( 3 );
将三个字节分配给A[i]
。你需要
for (int i = 0; i < 2; i++ ) A[i] = ( double* )malloc( 3 * sizeof(double) );
由于您没有分配足够的空间,因此数组的填充会在分配的内存之外写入并调用未定义的行为。
和
printf("%d", A[1][1]);
尝试使用double
的转换格式打印int
,这也会调用未定义的行为。您需要使用double
(或%f
,%g
或其他一些)转化打印%e
,
printf("%f", A[1][1]);
是你(可能)想要的。
在这种情况下发生的两件事情是
double
在浮点寄存器中传递,但printf
读取通用寄存器(在x86_64上常见)printf
读取构成double
的部分字节,并将其解释为int
(在32位x86上通用),因为您存储的double
值是有整数,有效位数有很多零位,然后在小端系统上,printf
读取的位都为零。