gpt4 book ai didi

c++ - 如何在我的 C++ 代码中获得运行时的双重自由错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:04:01 25 4
gpt4 key购买 nike

我在我的 C++ 代码中使用 Jansson 库。在库中创建任何 Jansson 变量时,应释放该变量以释放引用,我正在使用“json_decref(json_t *json)”方法来释放。但有时它会导致双重释放问题,而我在运行时没有遇到问题。也许这不正常,但我想在尝试释放一些引用时出现运行时错误。例如,我正在运行以下测试代码,

json_t *root = json_loads(any_json_message, 0, &error);
json_decref(root);
json_decref(root);

如您所见,存在问题,但我没有收到任何运行时错误,如 double free。

此外,我正在使用 CMake 来编译我的源代码。也许任何 cmake 标志都能解决我的问题。

有什么想法吗?

最佳答案

一旦被释放,访问指向对象的行为是不确定的。文档没有详细说明,但不止一次调用 json_decref(加上你在指针上调用 json_incref 的次数)也有未定义的行为。

Maybe it is not normal but I want to get a runtime error when I try to release some references.

好吧,Jansson 不会给你那个。

您的编译器可能会提供一个运行时分析器,它可能能够检测到一些未定义的行为并通过消息终止程序。有关如何使用分析器的信息,请参阅编译器手册。

关于c++ - 如何在我的 C++ 代码中获得运行时的双重自由错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53978661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com