0

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

但它只打印零……:/

有人帮忙吗?谢谢 :)

4

1 回答 1

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使用 a 的转换格式打印 a int,这也会调用未定义的行为。您需要使用(或,或其他)转换打印doubles ,%f%g%e

printf("%f", A[1][1]);

是你(可能)想要的。

在这种情况下会发生两件常见的事情是

  • double浮点寄存器中传递,但printf读取通用寄存器(x86_64 上常见)
  • printf读取组成的部分字节double并将它们解释为int(在 32 位 x86 上常见),因为double您存储的值是整数,有效数字有许多零位,然后在小端系统上,printf读取的位是全部为零。
于 2013-02-22T16:17:21.367 回答