0

释放用 cmallc 分配的无符号指针数组的最佳方法是什么?

 uint8_t *buf;
 buf = cs_calloc(ca->len + 13);

我确实喜欢这样,但我知道这不太正确,因为我收到了编译警告:

警告:传递 'free' 的参数 1 使指针从整数而不进行强制转换

for (i = 0; i < ca->len + 13; i++)
{   
 free(buf[i]);
buf[i] = NULL;
}

free(buf);

这是 cs_calloc 代码:

void *cs_calloc(size_t size){

 return (calloc (1,size));
 }

我的问题是 1. 我释放的方式,buf,我的意思是首先释放循环中的每个数组元素(free (buf[i]) 是否正确?我需要释放数组的元素,并将数组释放为多于

  1. 为什么我会收到编译警告,如果它是错误的,有人可以纠正我释放分配内存的方式(请给我写代码应该如何纠正?

提前致谢

4

1 回答 1

1

您只需要free(buf),仅此而已 - 所以只需放下for就可以了。尝试free(buf[i])是错误的,并且会欺骗库将buf[i](一个小整数)视为指针。

有一个且只有一个简单的规则:只有free您从mallocor收到的内容calloc


为什么会发生编译警告

您收到警告是因为您在需要指针free时使用整数调用。free

于 2013-02-25T08:39:37.867 回答