首页 > 解决方案 > cJSON_Delete() 和 cJSON_free()

问题描述

我还是 cJSON 库的新手,我不能完全理解 cJSON_Delete() 和 cJSON_free() 的用途,

  1. 是否有任何文档准确描述了应该发布哪些功能,以及何时使用 cJSON_free() 以及何时使用 cJSON_Delete()。
  2. cJSON_InitHooks() 的用途是什么以及如何在我的代码中使用它。
  3. 每次我声明一个变量cJSON *Variable;时,我是否需要释放它以最小化内存使用量,否则它会自行释放?

谢谢!!

标签: cmemory-leaksmalloccjson

解决方案


快速浏览自述文件​​和头文件显示:

  1. 来自信:没有,该项目似乎没有提供此类文件。

    • 无论如何,cJSON_free()如果你不打电话,你就不需要打电话cJSON_malloc()。它更像是一个帮助函数,让您调用free()malloc()挂钩函数。

    • 您需要调用cJSON_Delete()从任何分配函数(如解析器)收到的任何 cJSON 对象。

  2. 的目的cJSON_InitHooks()是为库提供您自己的内存分配函数。如果您不想使用默认函数或者如果您使用没有(工作)malloc()和的目标,这可能会很有趣free()

  3. 这样的声明不会为 cJSON 对象分配内存。如果没有获取到这样的对象,就无法调用cJSON_Delete()成功。通过调用cJSON_Delete(),例如由其中一个解析器分配的内存将被释放。

似乎您需要了解指针和动态内存分配才能正确使用此库。这是独立于这个库的相当基本的 C 东西。

但是,阅读提供的介绍(尤其是示例),如果有疑问,来源也会有所帮助。


推荐阅读