技術ノート:R6002ランタイムエラー
仕事上で触ったプログラムでたまたまぶつかって いろいろ調べたらわかった問題。
Visual C++にて
float A; FILE *fp; fp=fopen("data.txt","r"); fscanf(fp,"%f",&A); fclose(fp);
と書くと「R6002 - floating point not loaded」という ランタイムエラーが発生する。 もちろん「data.txt」ファイル内には小数を書いている。
どうやらscanf系の関数を使うときに「%f」が使われていながら プログラム中に小数点の値が出てこない場合に 浮動小数点ライブラリがリンクされずにエラーになる様子。
Direct3Dの場合はそこかしこに小数が登場するので問題ないが、 もっとシンプルなプログラムをVC++で実行すると発生する。
直し方はfloatやdoubleの演算 (コピーや代入なども含めて)を存在させるだけ。
float A=0.0f; //とにかくfloatを絡めた演算を行う FILE *fp; fp=fopen("data.txt","r"); fscanf(fp,"%f",&A); fclose(fp);
「小数を使いますよー」ということが コンパイラに伝われば問題なく動くようだ。
違うパターンで、
int B=2; float A=B; //float変数に代入 FILE *fp; fp=fopen("data.txt","r"); fscanf(fp,"%f",&A); fclose(fp);
とかでも動く。
しかしながら、解決法を知っていないとどうにもならず 何時間プログラムとにらめっこしてても 気づかないのでやっかいだ。
|