0

Cで2次元(動的)配列を埋める方法を知っている人はいますか? 私はこれを持っています:

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 :)

4

1 に答える 1

3

それか

for (int i = 0; i < 2; i++ ) A[i] = ( double* )malloc( 3 );

に 3バイトを割り当てますA[i]。あなたが必要

for (int i = 0; i < 2; i++ ) A[i] = ( double* )malloc( 3 * sizeof(double) );

十分なスペースを割り当てないため、配列への書き込みは割り当てられたメモリの外側に書き込み、未定義の動作を引き起こします。

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

doubleは、 の変換形式で を出力しようとしますがint、これも未定義の動作を引き起こします。doubles を%f(または%g%e、またはその他の) 変換で出力する必要があります。

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

あなたが(おそらく)欲しいものです。

その場合によくある 2 つのことは、次のとおりです。

  • これdoubleは浮動小数点レジスタで渡されますがprintf、汎用レジスタを読み取ります (x86_64 で共通)
  • printfを構成するバイトの一部を読み取り、それらを(32 ビット x86 で一般的な)doubleとして解釈します。保存する値は整数であり、有意桁には多くのゼロ ビットがあり、リトル エンディアン システムでは、読み取られるビットは次のとおりです。すべてゼロ。intdoubleprintf
于 2013-02-22T16:17:21.367 に答える