1

Cプログラムで定義したマクロに問題があるようです。

このソフトウェアをコンパイルして、MIPSコンパイラで正常に実行します。

ビルドはOKですが、iccを使用すると、実行時に「セグメンテーション違反」というエラーがスローされます。

これらの両方を64ビットアーキテクチャでコンパイルしました(SGIではMIPS、Intelプラットフォームでは-64フラグとiccを使用)。

両方のシステムでこれを正しく機能させるために使用する必要のある魔法のスイッチはありますか?インテル®コンパイラーの警告をオンにすると、プログラム内でマクロが呼び出されるすべての場所で警告がスローされます。通常、マクロのパラメーター(intからchar *)の不一致型の線に沿ったもの、またはそのようなもの。

これが問題のマクロです

 #define DEBUG_ENTER(name) {tdepth++; 
 if(tnames[tdepth] == NULL) tnames[tdepth] = memalign(8, sizeof(char)*MAXLEN);
 strcopy(tnames[tdepth],name);
 FU_DEBUG("Entering \n");}

これは基本的にデバッグに使用されます-関数呼び出しの数に基づいて設定されたタブ数のログファイルに出力します。(tdepth =タブの深さ)

マニュアルページをチェックしました。memalignはIRIXでのみサポートされているようです。これは私の問題かもしれません。私はそれを追跡するつもりです。

4

3 に答える 3

1

これは、システムの「エンディアン」に関係している可能性があります。ここを見ると、MIPSには切り替え可能なエンディアンがあるようです。すでに正しいエンディアンを使用しているかどうかはわかりませんが、使用していない場合は、間違いなく問題が発生します。

于 2010-05-27T19:19:53.207 に答える
0

配列tnamesはの配列のようですint。ポインタを割り当てる場合は、ポインタ型の配列である必要があります。この場合char *はおそらく適切です。

(また、strcopy()標準機能ではありません-あなたが意味しないのは確かですstrcpy()か?)

于 2010-05-27T22:27:03.733 に答える
0

これはバイトオーダーの問題である可能性があります。MIPSはビッグエンディアンになる可能性がありますが、Intelはリトルエンディアンです。

于 2010-05-27T19:19:02.987 に答える