0

私は移行プロジェクトに取り組んでいます。ここでは、大規模な C++ ライブラリ セットをメインフレームから Solaris に移行しています。移行は正常に完了しましたが、アプリケーションの実行中に、いくつかの場所で「シグナル SEGV (障害アドレスでのマッピングなし)」でクラッシュします。

アプリケーションはwindowsにも対応しているので、purify on windowsで確認しました。アプリケーションにメモリ リークはなく、Windows で正常に動作します。

このタイプのエラーを作成する可能性のある他の理由は何でしょうか。このタイプのエラーを追跡するためのツールはありますか?

4

4 に答える 4

1

必ずしもメモリリークではありません。メモリの一部が解放された後に参照されている可能性があります。

私の友人はかつて、Windows では問題なく動作するが Linux では segv を提供するコードを持ってきてくれました。Windowsでメモリを解放した後(おそらく短期間)、メモリがまだ有効な場合がありますが、Linuxではすぐにsegvをトリガーしました。

于 2008-12-22T14:06:08.270 に答える
1

以下の行は私には間違っているように見えます

m_BindMap[sLabel] = b;   // crashes at this line at when map size

文字列の末尾に数字を追加しようとしていると思います。代わりにこれを試してください

stringstream ss;
ss << ":BIND" << ns;
string sLabel = ss.str();
于 2008-12-22T15:40:20.797 に答える
0

Solaris と dbx デバッガーで CC コンパイラーを使用しています。クラッシュしているコールスタックを知っています。しかし、それは異常なクラッシュです。

map<string,CDBBindParam,less<string> >m_BindMap;



CNumString ns(CNumStringTraits(0,2,'0'));
ns = m_BindMap.size();
string sLabel = ":BIND"+ns;
CDBBindParam b(sLabel,val);
**m_BindMap[sLabel] = b;**   // crashes at this line at when map size is more than 2
return sLabel;
于 2008-12-22T14:09:17.157 に答える
0

g ++を使用していますか?その場合は、「-g」フラグを付けて再コンパイルしてください。プログラムを gdb で実行します。クラッシュしたら、「bt」(バックトレース用) と入力すると、問題の場所がわかります。

于 2008-12-22T14:03:53.503 に答える