以下のコードでは、変数「tmpRes」は「BuildCMD」の呼び出し前は正しいのですが、この関数内では正しい値が失われ、0 に設定されます。BuildCMD 関数内でも正しい値が保持されないのはなぜですか?
呼び出しコード:
//tmpRead just an array of integer
float tmpRes=0;
Evaluate(tmpRead[3],tmpRead[4],tmpRead[5],&tmpRes);
printf("PRE : %f\n",tmpRes); //correct result
char *dataBuff=BuildCMD(RES,tmpData,tmpRes);
コードを評価する:
int Evaluate(int num1,int op,int num2,float *Res)
{
float tmpRes=0;
switch(op)
{
case(int)'+':{tmpRes=num1+num2;break;} //same with *Res=....
case(int)'-':{tmpRes=num1-num2;break;}
//etc...
}
*Res=tmpRes;
return 0;
}
BuildCMD:
char* BuildCMD(enum CMD cmd,int *values,float result)
{
//here the result is ALWAYS 0
//even if it was corrent before the call of BuildCMD
printf("IN: %f\n,result);
fflush(stdout);
//...rest of the code
}
前もって感謝します。
はい、アプリケーションはマルチスレッドです。サーバーから mainClient の n インスタンスを作成します。ソースコードへのリンク (上に書いたものは単純化されています)。 mainClient.c Utilities.c