[英]Filling 2D dynamicaly allocated array in C
有誰知道如何在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]);
但它只顯示零...:/
有人幫忙嗎? 謝謝 :)
那
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]);
嘗試為int
打印具有轉換格式的double
,這也會調用未定義的行為。 您需要使用%f
(或%g
, %e
或其他一些)轉換來打印double
s,
printf("%f", A[1][1]);
是您(可能)想要的。
在這種情況下發生的兩種常見情況是
double
傳遞到浮點寄存器中,但是printf
讀取通用寄存器(x86_64上常見) printf
讀取構成double
部分字節並將其解釋為int
(在32位x86上很常見),因為您存儲的double
值是整數,所以有效位數有很多零位,然后在little-endian系統上, printf
讀取的位均為零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.