C语言分配内存:malloc()和free()

本文介绍了C语言中的内存管理函数malloc()和free()的使用方法,包括动态分配内存、释放内存及如何避免内存泄露等问题。同时,还探讨了不同类型的存储类别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

malloc()和free()函数介绍

malloc()和free()的原型都在stdlib.h头文件中,通常要配套使用malloc()用来动态分配内存,free()用来释放内存。

malloc()函数原型:

void *malloc( size_t size );

malloc()函数接收的参数:所需的内存字节数;返回类型为指向void的指针,可用于返回指向数组的指针、指向结构的指针等,所以通常该函数的返回值会被强制转换为匹配的类型。
函数的调用例子如:

double * ptd;
ptd = (double*) malloc(30 * sizeof(double));

free()函数:

free()函数是将内存释放,free()的参数是一个指针,指向由malloc()分配的一块内存。调用如:

free(ptd);

动态分配变长数组

malloc()可以用于程序运行时动态分配变长数组,如:

int max;
double * ptd;
scanf("%d", max);
ptd = (double*) malloc(max * sizeof(double)); // 根据输入max的值,分配一个长度为max的数组

free()的重要性,内存泄露

void test(double ar[], int n){
	double *temp = (double *) malloc(n * sizeof(double));
	...
	// 忘记使用free();
}

调用test()时,创建了指针temp分配一块内存,但没有使用free()释放,但当下次调用该函数时该内存块也无法被再访问和再使用,若多次调用就会出现耗尽所有内存的问题,即内存泄露。

补充知识–存储类别

程序的内存的使用可分为三类:
1、静态变量使用:
在编译时确定,只要程序还在运行就可以访问存储在该部分的数据。
2、自动变量的使用:
随着程序调用函数和函数结束,自动变量所用的内存数量也相应地增加和减少。这部分的内存通常作为栈来处理。
3、动态分配的内存:
在调用malloc()或相关函数时存在,在调用free()后释放。这部分由程序员管理,这部分内存用于动态分配会支离破碎。使用动态内存通常比使用栈内存慢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值