簡體   English   中英

在C中填充2D動態分配的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM