モノリシックなコードを動的にロードされたライブラリに分割し、main()
それを呼び出します。stdc++ 以外のライブラリは使用せず、クラスもありません。メンバー関数を持たないテンプレート化された構造体だけです。メモリを明示的に割り当てたり、コード内の何かを削除または解放したりしていません。からオブジェクトを消去しますlist<T>
。
ライブラリ + メインに切り替えた後、断続的にクラッシュします。
*** glibc detected *** : free(): invalid pointer:
バックトレースから、リスト イテレータが関与しているように見えますが、名前がマングルされたシンボルのため、確認が難しくなっています。
ただし、gdb 内でクラッシュすることはなく、valgrind がメモリの破損やリークを検出することもありません。
以前に共有ライブラリを構築したことがありません。これは私が使用しているものです
g++ -fPIC -shared library_src.cpp -o libblaH.so
g++ main.cpp -lblaH
ライブラリ全体が単一のソース ファイルにあり、ライブラリ関数は extern "C"
ブロックにラップされて c ユーザーがアクセスできるようになっていますが、現在、g++ を使用して main() を c++ コードとしてコンパイルしています。
最適化オプションを追加すると、-O2
(特に) クラッシュが発生し始めます。
無効なポインターがmallocelectricfence
によって割り当てられなかったと言っています。
バグを追い詰める方法についての提案をいただければ幸いです。どこかでリストイテレータを無効にしているように感じますが、どうすればよいかわかりません。削除されたエントリを除いて、無効にすることはできないと思いました。