libtorrent-rasterbar和QGuiApplication导致内存损坏

时间:2013-11-24 18:16:25

标签: qt libtorrent

我正在尝试在我的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位构建中,两种变体的工作方式相同。

1 个答案:

答案 0 :(得分:1)

这很可能是由于使用一组TORRENT_ *构建libtorrent定义并使用不同的集合链接它。其中一些定义会影响公共API中使用的某些结构的布局,并且当调用应用程序和库之间存在差异时会引入ABI不兼容问题。