1

私は printf 関数を連続して呼び出し、最初の printf は書き込む必要があるものを書き込み、2 番目の printf は無効な値を書き込むだけで、いくつかのエラーを推測します。

「LOC」の型は私が定義し、変数「i」は呼び出し後に変更されません。printf と指定した値との不一致を二重にチェックしました。

i=2;
printf("x = %f,y = %f,z = %f\n",(*LOC)[0].ProjectionPoints[i].X,(*LOC)[0].ProjectionPoints[i].Y,(*LOC)[0].ProjectionPoints[i].Z); /* Prints perfectly */
printf("x = %f,y = %f,z = %f\n",(*LOC)[0].ProjectionPoints[i].X,(*LOC)[0].ProjectionPoints[i].Y,(*LOC)[0].ProjectionPoints[i].Z); /* Shows some errors and values are "0" */

最初の printf 書き込み

x = -10.000000,y = -8.000000,z = -10.000000

2 番目の printf 書き込み

x = 0.000000,y = 0.000000,z = -1.#QNAN0

変数を として定義してconstも何も変わりません。

私のコンパイラは次のとおりです。MS Visual C++ 2012

コメントを読んだ後。

typedef struct {
P3C_Point *ProjectionPoints;
uint Distance,LayerID,NumberOfPoints,ModelID;} P3C_LayerOnCurtain;
/* and */
P3C_LayerOnCurtain **LOC = P3C_Compile(Stream);
/* when I try printf in P3C_Compile it has no problems */

値を返す前にテストを作成しました。関数で生成される「LOC」は完全にprintfです。

回答/解決策;

 P3C_LayerOnCurtain *LOC = *P3C_Compile(Stream);
4

1 に答える 1

5

最も可能性の高い原因は、LOCまたは(*LOC[0].ProjectionPoints)それらを返した関数のローカル変数へのポインターです。

printfその場合、それらはのローカル変数によって上書きされます。

于 2013-05-31T09:03:06.710 に答える