Jsoncpp-当Json::reader超出作用域时,非常简单的测试崩溃
Jsoncpp - very simple test crashes when Json::reader goes ot of scope
我已经下载并安装了jsoncpp库。然后我尝试在我自己的应用程序中使用该库:
#include <json/json.h>
void parseJson() {
Json::Reader reader;
}
int main(int argc, char ** argv) {
parseJson();
exit(0);
}
该程序编译和链接良好,但在运行时会与SIGSEGV一起崩溃。gdb回溯如下:
(gdb) bt
#0 0x0000003a560b7672 in __gnu_cxx::__exchange_and_add () from /usr/lib64/libstdc++.so.6
#1 0x00000000004031e9 in std::string::_Rep::_M_dispose (this=0xffffffffffffffe9, __a=@0x7fffbfe60e57)
at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.h:232
#2 0x0000000000403236 in ~basic_string (this=0x7fffbfe60fb0)
at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.h:478
#3 0x00000000004038d4 in ~Reader (this=0x7fffbfe60eb0) at /private/joaho/Parser/opm-parser/external/json/json-cpp/include/json/reader.h:23
#4 0x0000000000402990 in parseJson () at /private/joaho/Parser/opm-parser/opm/parser/eclipse/ExternalTests/ExternalTests.cpp:51
#5 0x00000000004029ab in main (argc=1, argv=0x7fffbfe610c8)
at /home/user/Parser/opm-parser/opm/parser/eclipse/ExternalTests/ExternalTests.cpp:56
也就是说,在我看来,它好像在自毁装置中坠毁了。据我所知,Json::Reader没有自己的dstructor,所以它必须是默认的析构函数。正如你所看到的,我正在运行一个相当旧的g++版本——这可能是问题所在吗?
正如我所评论的:
当使用Debian/Sid上的GCC版本4.8.1(因此libjsoncpp-dev
0.6.0~rc2-3
)作为g++-4.8 -g -Wall -I/usr/include/jsoncpp/ esjson.cc -ljsoncpp -o esjson
编译时,您的程序在编译时不会发出警告,并且在运行时不会崩溃。
GCC 4.1.2真的很旧(2007年2月!),不再受支持,也不太符合C++标准(GCC,现在版本为4.8.1,自4.1以来在C++标准一致性方面取得了巨大进展)
所以我不确定GCC 4.1。是错误的,但我不会感到惊讶:它的C++声誉很差,从那以后,C++标准和GCC编译器都得到了很大的改进。升级GCC是值得的,无论是为了更好地支持C++,还是为了改进诊断和优化。
所以我建议您使用更新的GCC;如果您没有root访问权限,可以考虑从它的源tarball编译它;在源树之外构建它,例如../gcc-4.8.1/configure --program-suffix=-4.8 --prefix=$HOME/pub
、make
和make install
-在安装了它的依赖项
相关文章:
- 一个非常简单的win32套接字代码,但工作错误
- 无法使用crfsuite的C++ API编译一个非常简单的Tagger示例
- C++中一个非常简单的枚举类错误
- C / C++链接问题与非常简单的设置
- 理解循环,非常简单
- 我正在写一个非常简单的字母评分系统,if语句是最有效的吗?
- 非常简单的C 文本冒险的代码结构
- 为什么在 v8 中运行嵌入在 c++ 中的非常简单的脚本会占用内存?
- boost/asio:非常简单的聊天服务器无法访问收到的消息
- DirectX 11 - 如何创建非常简单的 2D 纹理
- 如果将功能的非常简单的定义移动到.cpp,则编译时间的减少是多少
- 在C 中编写一个非常简单的事件类
- Winapi中使用ListBox的非常简单的示例
- 在使用Qt Creator创建一个非常简单的项目时,在Qt中遇到"segmentation fault"
- 非常简单C++基本代码
- 需要非常简单的循环C++帮助
- C++非常简单的未解决外部
- Clang编译器错误,适用于非常简单的程序
- 非常简单的 x64 组装/C++应用程序中未解决的外部错误
- 错误:在非常简单的示例中,预期的构造函数、析构函数或类型转换