Qt5 アプリケーションで libtorrent を使用しようとしていますが、malloc(): メモリ破損のようなメッセージで segfault が発生し続けます。何時間もデバッグした後、この問題を引き起こすこの小さなコードを思いつきました。
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
std::string filename = "fedora.torrent";
libtorrent::error_code ec;
libtorrent::add_torrent_params parameters;
std::cerr << "111\n";
parameters.ti = new libtorrent::torrent_info(filename, ec);;
std::cerr << "222\n";
return app.exec()
}
この場合、torrent_info のコンストラクターが segfault を生成します。しかし、次のように QGuiApplication を作成する前に libtorrent 関連のコードを移動すると:
int main(int argc, char *argv[])
{
std::string filename = "fedora.torrent";
libtorrent::error_code ec;
libtorrent::add_torrent_params parameters;
std::cerr << "111\n";
parameters.ti = new libtorrent::torrent_info(filename, ec);;
std::cerr << "222\n";
QGuiApplication app(argc, argv);
return app.exec()
}
その後、問題なく動作します。また、この問題は 32 ビット ビルドにのみ存在し、64 ビット ビルドでは両方のバリアントが同じように機能します。