【问题标题】:how free unsigned pointer array and it's elements (calloc)如何释放无符号指针数组及其元素(calloc)
【发布时间】:2013-02-25 08:38:12
【问题描述】:

释放用 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. 为什么我会收到编译警告,如果是错误的,有人可以更正我释放分配内存的方式吗(请写下代码应该如何更正?

提前致谢

【问题讨论】:

    标签: arrays pointers free unsigned calloc


    【解决方案1】:

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

    只有一个简单的规则:只有 free 您从 malloccalloc 收到的内容。


    为什么会出现编译警告

    您收到警告是因为当 free 需要一个指针时,您使用整数调用了 free

    【讨论】:

    • 感谢您的回复,好的,我会按照您的建议去做,只是出于好奇,我也想知道,为什么会出现编译警告?我的意思是,现在在阅读了你的帖子之后,我知道我不需要释放数组的元素,但我也想知道,如果我必须释放它,我需要对 free 进行什么更改,以免收到编译警告
    • 所以如果我只是想修复那个警告,代码应该像这样改变(现在在阅读你的评论后我知道它不需要,只是我想知道如何修复这个警告:for(int i=0 ; i
    • @nimatajfar 这仍然会使程序崩溃,但确实会阻止警告。
    • 非常感谢您的回复
    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多