永发信息网

c 语言中的free 函数 用法

答案:3  悬赏:0  手机版
解决时间 2021-05-09 17:21
  • 提问者网友:兔牙战士
  • 2021-05-09 13:42

int main(int argc, char* argv[])
{
 void *test_ptr = NULL;
 test_ptr = malloc(10);

 free(test_ptr);
 return 0;
}

 

象上面的写法对吗?free可以根据指针就知道他的大小去释放内存空间吗?

最佳答案
  • 五星知识达人网友:枭雄戏美人
  • 2021-05-09 14:50

不能。FREE不能依靠单纯的指针去释放。


你去看看BMP文件的结构,看看很多的程序的结构,他们的结构体中都会存有数据的大小,而且因为面对的是数据流,所以大小往往被放在最开头。


同样的,你MALLOC(10) ,实际上一定会大于10,它要在内部去存储开辟内存的大小的数据,依次来决定释放的字节。



看见p - 2 的数值了吗?它就是14:10个字节的MALLOC,4字节是大小数据单元。


FREE就是根据那个数值才知道到底释放多少的。

全部回答
  • 1楼网友:轻雾山林
  • 2021-05-09 15:52
free只要传入需要释放的指针就好了,上面的写法从函数使用的角度来讲没问题,不过void只是表示函数是无返回类型的,不能用来声明变量吧。当然malloc函数使用时最好前面强制转换为相应类型的指针例如(int *)malloc(sizeof(int));
  • 2楼网友:我住北渡口
  • 2021-05-09 14:59

完全正确。

只需注意产生野指针就好了。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯