在C中填充2D动态分配的数组

时间:2013-02-22 16:15:43

标签: c++ c arrays matrix 2d

有谁知道如何在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:)

1 个答案:

答案 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读取的位都为零。