1

私はiccを使用してredhatシステムで作業しているソフトウェアをいくつか持っていますが、正常に動作しています。MIPSで実行されているIRIXシステムにコードを移植すると、値が確実に存在するはずのときに「nan」として出力される計算がいくつか得られます。

RedHat以外のシステムには優れたデバッガーがありませんが、配列の一部が散発的に「nan」になっているため、ドット積の計算が「nan」に戻っていることがわかりました。

デバッガーでは追跡できないので、memcpyに問題があるのではないかと考えています。動的に割り当てられた配列を持つMIPSコンパイラmemcpy()関数に問題はありますか?私は基本的に使用しています

 memcpy(to, from, n*sizeof(double));

そして、私はそれを本当に証明することはできませんが、これが問題かもしれないと思います。いくつかの回避策はありますか?おそらく、smeデータがずれていますか?どうすれば修正できますか?

4

3 に答える 3

1

あなたの問題が のバグに起因しているとしたら、私は驚くでしょうmemcpy。それは調整の問題かもしれません: あなたdoubleの は十分に調整されていますか? double(またはdouble[]オブジェクトまたはポインターを介してのみ格納する場合はそうなりますが、ポインターdouble*を介して移動する場合はそうではない可能性がありvoid*ます)。X86 プラットフォームは、ほとんどのプラットフォームよりもミスアライメントに対して寛容です。

高警告レベルで gcc を使用してコードをコンパイルしようとしましたか? (Gcc は、マイクロコントローラーやメインフレーム以外のほぼすべての場所で使用できます。生成されるコードは遅くなりますが、「ネイティブ」コンパイラーよりも優れた診断機能を備えています。)

もちろん、たまたま元のプラットフォームで目に見えるバグが発生しなかったのは、コードの無関係な部分でのバッファ オーバーフローまたはその他のメモリ管理の問題である可能性があります。

適切なデバッガーにアクセスできない場合は、少なくとも重要な場所で printf を実行してみてください。

于 2010-08-19T18:30:21.983 に答える
1

toメモリ領域とfrom重複する可能性はありますか? memcpy重複するメモリ領域を処理する必要はありません。これが問題である場合、解決策は代わりにmemmoveを使用するのと同じくらい簡単です。

于 2010-08-19T19:06:44.870 に答える
0

sizeof()確実にサポートされていますか?

于 2010-08-19T18:20:27.797 に答える