当我阅读 cJSON 的代码时,对代码的理解有问题:
static void *(*cJSON_malloc)(size_t sz) = malloc;
static void (*cJSON_free)(void *ptr) = free;
这些是函数指针初始化。例如:
static void *(*cJSON_malloc)(size_t sz) = malloc;
相当于:
typedef void *(*cJSON_malloc_type)(size_t sz);
static cJSON_malloc_type cJSON_malloc = malloc;
我希望这更容易理解。
这只是函数指针。通过这种方式,我们可以使用“cJSON_malloc”代替 malloc 和 cJSON_free 代替 free。
正如其他人已经提到的,这些是函数指针。有了这些,您可以在运行时更改分配器和释放器功能。
您想要使用与 malloc 和 free 不同的分配器的原因有很多,例如:
将每个分配和释放打印到标准输出的示例分配器:
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);
}