【问题标题】:Jsoncpp Json:Reader causing error " Debug assertion... _pFirstBlock == pHead"Jsoncpp Json:读取器导致错误“调试断言... _pFirstBlock == pHead”
【发布时间】:2014-06-16 04:51:01
【问题描述】:

我正在尝试制作一个使用来自网站的 Json 的程序,但我似乎遇到了问题:

std::ifstream ifile("json.txt");
Json::Reader reader;
Json::Value root;
if (ifile != NULL && reader.parse(ifile, root)) {
    const Json::Value arrayDest = root["dest"];
    for (unsigned int i = 0; i < arrayDest.size(); i++) {
        if (!arrayDest[i].isMember("name"))
        continue;
        std::string out;
        out = arrayDest[i]["name"].asString();
        std::cout << out << "\n";
    }
}

我已将问题范围缩小到这一行 Json::Reader reader;

它给了我一个错误:

调试断言... _pFirstBlock == pHead

我正在使用 jsoncpp

【问题讨论】:

    标签: c++ json debugging jsoncpp


    【解决方案1】:

    这不是 JsonCpp 错误; pHead 没有出现在 JsonCpp 源代码中。从一个简短的谷歌搜索来看,它看起来像一个error reported within Microsoft Visual C++'s runtime libraries,由在使用 DLL 时分配内存的位置和释放它的位置之间的不匹配触发,或者正在使用的 C 运行时版本之间,或者 C正在链接运行时。

    【讨论】:

    • 为什么它讨厌“Json:Reader reader”这行?我不确定哪些 DLL 会与此相关联
    • @Mocolicious - 您拥有 C/C++ 运行时库(取决于项目设置,可能是也可能不是 DLL)、JsonCpp 库(可能是也可能不是 DLL,并且取决于 C/C++ 运行时库)和您自己的代码(这取决于 JsonCpp 和 C/C++ 运行时)。例如,如果您的代码和 JsonCpp 在如何使用 C/C++ 运行时存在分歧,那么就会出现混乱。我对 Visual C++ 没有太多的个人经验,但谷歌搜索(或链接的 StackOverflow 答案)应该有很多关于如何修复它的细节。
    • 是的,谢谢。我最初搜索该链接时找到了该链接,但我仍然对从这里去哪里感到困惑。
    • @Mocolicious - 就像我说的,我最近没有太多 MSVC 经验,但请尝试验证是否所有内容都是静态链接的,或者您的项目和 JsonCpp 都作为 DLL 链接到 MSVC 运行时.验证一切都使用相同的设置(调试与发布)。验证使用相同版本的 MSVC 的所有内容。链接的问题以及从那里链接的一些讨论提供了有关要检查的特定设置的更多详细信息。
    • @Mocolicious - 如果一切都失败了,请直接在项目中包含 JsonCpp 源文件,而不是将其链接为库。这应该绕过所有这些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多