visual studio 2022
jsoncpp
GitHub - open-source-parsers/jsoncpp: A C++ library for interacting with JSON.
根据官方github下推荐给visual studio得安装方式 安装jsoncpp
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install jsoncpp
正常情况下,使用jsoncpp没有任何问题
特定情况下,原因未知,我是封装再cef3中使用出现了这个提示:
Debug Assertion Failed!
Program: ...m-113.0.5672.93_windows32\tests\cefclient\Debug\cefclient.exe
File: D:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.36.32532\include\xmemory
Line: 944
Expression: null pointer cannot point to a block of non-zero size
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
google了一大堆,没找到解决方案,后来看了官方的例子
jsoncpp/readFromString.cpp at master · open-source-parsers/jsoncpp · GitHub
换了一种写法解决了,
原来代码,这个是报错代码
Json::Reader reader;//json解析
Json::Value value;//表示一个json格式的对象
std::string aaa = "{\"status\":true}";
if (reader.parse(aaa.c_str(), value) && !value.empty()) {
if (!value["status"].asBool()) {
return 1;
}
}
else {
return 1;
}
改进后
Json::Reader reader;//json解析
Json::Value value;//表示一个json格式的对象
std::string aaa = "{\"status\":true}";
const auto rawJsonLength = static_cast<int>(aaa.length());
if (reader.parse(aaa.c_str(), aaa.c_str() + rawJsonLength, value) && !value.empty()) {
if (!value["status"].asBool()) {
return 1;
}
}
else {
return 1;
}
没有报错,可以跑通了