cJSON:无法理解它的源代码

时间:2013-09-03 11:44:08

标签: c json cjson

当我阅读cJSON的代码时,并且在理解代码时遇到了问题:

static void *(*cJSON_malloc)(size_t sz) = malloc;

static void (*cJSON_free)(void *ptr) = free;

3 个答案:

答案 0 :(得分:2)

这只是函数指针。通过这种方式,我们可以使用' cJSON_malloc'代替malloc 和cJSON_free代替免费。

答案 1 :(得分:2)

那些是函数指针初始化。例如:

static void *(*cJSON_malloc)(size_t sz) = malloc;

相当于:

typedef void *(*cJSON_malloc_type)(size_t sz);
static cJSON_malloc_type cJSON_malloc = malloc;

我希望这更容易理解。

答案 2 :(得分:1)

正如其他人已经提到的,这些是函数指针。有了这些,你可以在运行时更改allocator和deallocator函数。

为什么你想要使用不同于malloc和free的分配器有很多原因,例如:

  • 性能
  • 调试
  • 安全
  • 特殊设备内存

将每个分配和释放打印到stdout的示例分配器:

void *my_malloc(size_t size) {
    void *pointer = malloc(size);
    printf("Allocated %zu bytes at %p\n", size, pointer);
    return pointer;
}

void my_free(void *pointer) {
    free(pointer);
    printf("Freed %p\n", pointer);
}

void change_allocators() {
    cJSON_hooks custom_allocators = {my_malloc, my_free};
    cJSON_InitHooks(custom_allocators);
}