我正试图在我的Qt5应用程序中使用libtorrent,但是仍然使用malloc():内存损坏之类的消息获取分段错误。经过几个小时的破除,我想出了一小块代码,它触发了这个问题:
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的构造函数会产生分段错误。但是,如果在创建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位构建中,这两种变体的工作方式都是相同的。
发布于 2013-11-25 09:39:20
这很可能是因为使用一组TORRENT_*定义了libtorrent,并使用不同的集合对其进行链接。其中一些定义影响在公共API中使用的某些结构的布局,以及当调用应用程序和库之间的差异导致ABI不兼容问题时。
https://stackoverflow.com/questions/20178064
复制相似问题