栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言库函数malloc和free介绍

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言库函数malloc和free介绍

在计算机中内存可以简单分为三个储存区,分别是栈区(存放局部变量、函数形参),堆区(动态内存分配),静态区(静态变量、全局变量)。本篇文章将围绕计算机中的自由存储区——“堆”来谈谈动态内存分配函数malloc()和free()。

malloc和free函数介绍

C语言提供了一个动态内存开辟的函数:

void* malloc (size_t size);

这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。

  • 如果开辟成功,则返回一个指向开辟好空间的指针。
  • 如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。
  • 返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。
  • 如果size为0,malloc的行为是标准未定义的,取决于编译器。

举个例子:

#include 
#include 
int main()
{
	//int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
	//申请空间
	int* p = (int*) malloc(40);
	if (p == NULL)
	{
		return -1;
	}
	//开辟成功了
    int i = 0;
	for (i = 0; i < 10; i++)
	{
		*(p + i) = i;
		printf("%d ", *(p + i));
	}
	return 0;
}

C语言提供了另外一个函数free,是专门用来做动态内存的释放和回收的:

void free (void* ptr);

free函数用来释放动态开辟的内存。

  • 如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的。
  • 如果参数ptr是NULL指针,那函数什么事情都不做。

举个例子:

#include 
#include 
int main()
{
	//int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
	//申请空间
	int* p = (int*) malloc(40);
	if (p == NULL)
	{
		return -1;
	}
	//开辟成功了
    int i = 0;
	for (i = 0; i < 10; i++)
	{
		*(p + i) = i;
		printf("%d ", *(p + i));
	}
	//释放空间
	free(p);
	p = NULL;
	return 0;
}

注明:malloc() 和 free() 的头文件都是 #include 千万别忘了哦~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311891.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号