首页 > 解决方案 > 即使 RAPIDJSON_ASSERT 已被重新定义,Rapidjson 仍会中止

问题描述

我将 rapidjson.h 中 RAPIDJSON_ASSERT 的定义修改为:

#define RAPIDJSON_ASSERT(x) (if(!(x)) throw std::logic_error("Rapidjson assertion error") )

但程序仍然在 document.h 第 1103 行中止。有谁知道为什么?谢谢你。

template <typename SourceAllocator>
GenericValue& operator[](const GenericValue<Encoding, SourceAllocator>& name) {
    MemberIterator member = FindMember(name);
    if (member != MemberEnd())
        return member->value;
    else {
        RAPIDJSON_ASSERT(false);    // line 1103. see above note

        // This will generate -Wexit-time-destructors in clang
        // static GenericValue NullValue;
        // return NullValue;

        // Use static buffer and placement-new to prevent destruction
        static char buffer[sizeof(GenericValue)];
        return *new (buffer) GenericValue();
    }
}

标签: c++abortrapidjson

解决方案


推荐阅读