C语言malloc()和free()函数

本人是个小白,写博客主要是复习加记录。如果有写错的、写的不好的、要添加的内容,

希望大佬指点(在评论区留言),我会慢慢完善。(谢谢了!!!!)

malloc()函数原型

 extern void*malloc(unsigned int size);

该函数接受一个参数:所需的内存字节数。

malloc()函数的作用:

malloc()函数会找到合适的空闲内存块,这样的内存是匿名的。(malloc()分配内存,但不会为其赋名)。

malloc()函数的使用:

malloc()函数会返回动态分配内存的首字节地址。故可以把该地址赋给一个指针变量,并使用指针访问这块内存。

因为char表示1字节,malloc()的返回类型通常被定义为指向char的指针。

但从ANSI C标准开始,C使用一个新型:指向void的指针(该类型相当于一个“通用指针”)。

所以malloc()函数返回的实际是一个无类型的指针,malloc()函数可用于返回指向数组的指针、指向结构的指针等,所以通常给函数的返回值会被强制转换为匹配的类型。

在ANSI C中,应该坚持使用强制类型转换,提高代码的可读性。

故可以这样使用malloc()函数:

指针自身 = (指针类型*)malloc(sizeof(数据类型)*数据数量)

double  * ptd;//创建一个ptd指针

ptd = (double *) malloc(30 * sizeof(double)); //ptd指向malloc函数分配好内存的地址

注:指针ptd被声明为指向以个double类型,而不是指向内涵30个double类型值的块。故,如果让ptd指向这个块的首元素,便可以像数组名一样去使用它。

例:ptd[0]访问该块的首元素,ptd[1]访问第2个元素,以此类推。

如果malloc()分配内存失败,便返回空指针NULL。

malloc()的头文件

#include <stdlib.h>

free()函数

free()的重要性

     静态内存的数量在编译时是固定的,在程序运行期间也不会改变。自动变量使用的内存数量在程序执行期间自动增加或减少。但是动态分配的内存数量只会增加,除非用free()进行释放。

free()的原型

void free(void *ptr);

free()的使用

free()函数的参数是之前malloc()返回的地址,该函数释放之前malloc()分配的内存。

注:不能用free()释放通过其他方式(如,声明一个数组)分配的内存。

double  * ptd;//创建一个ptd指针

ptd = (double *) malloc(30 * sizeof(double)); //ptd指向malloc函数分配好内存的地址

free(ptd);//释放malloc()函数分配的内存

对于free(ptr),若ptr为NULL,则可进行屡次释放,若ptr是非空指针,则free()对ptr只能进行一次操作,不然程序将崩溃。

free()的头文件

#include <stdlib.h>

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值