C语言学习之我见-malloc和free内存申请及释放函数

malloc函数负责向计算机申请确定大小的内存空间。
free函数负责释放malloc的申请空间。

(1)函数原型

   void  free(void *_Memory);
  void * malloc(size_t _Size)

(2)头文件

stdlib.h

(3)功能

     malloc负责申请size_t _Size大小的内存空间,并且把所申请得到的内存空间首地址,
 作为void*返回。用户往往必须把void*强制转换。
 	(注意:进程不会自动释放malloc申请的变量,无论是在主函数还是子函数,都不会)
 	
 	正因为malloc申请内存不会自动释放,所以使用malloc必须配套free主动释放,否则申请
 的内存空间将会一直存在到进程被结束。如果申请过多,会导致内存溢出

(4)基础实例代码

	char* ptc = (char*)malloc(30*sizeof(char));
	int* pti = (int*)malloc(30*sizeof(int));
	for(int i=0;i<30;++i)
	{
		printf("%d ",ptc[i]);//用来依次输出每个字符
	}
	for(int i=0;i<30;++i)
	{
		printf("%d ",pti[i]);
	}p
	free(ptc); 
	free(pti); 

(5)输出情况
在这里插入图片描述
(6)基础实例代码2:

	char* ptc = (char*)malloc(30*sizeof(char));
	int* pti = (int*)malloc(10*sizeof(int));

	char a[]="zobol's Magic Cabin";
	int b[10]={1,2,3,4,5,6,7,8,9,10};
	strcpy(ptc,a);//字符串复制
	memcpy(pti,b,10*sizeof(int)); //数组内存复制,注意第三个参数是以字节为单位

	printf("%s
",ptc);//输出
		for(int i=0;i<10;++i)
	{
		printf("%d ",pti[i]);
	}

(7)输出情况:
在这里插入图片描述
(8)问题1:如果不用free释放malloc申请的内存,会发生什么事?
回答:那你只需要很简短的代码就可以榨干你的电脑的内存。

	for(int i=0;i<99999999;++i)
		{
			malloc(300000);
		}

(9)如果不用指针接住malloc申请的内存空间的地址,会发生什么事情?
回答:malloc已经向计算机申请了空间了,但是你没有保存返回的空间内存地址,那就等于白占用看计算机空间。

(10)在子函数内部malloc申请的空间,会不会随着子函数结束而释放?
回答:不会!C语言给予了程序员绝对的自由,malloc申请的空间,除了程序员主动调用malloc以外,绝对不会被程序自动释放。

如果有帮助,欢迎关注我的个人公众号:zobol的魔法藏书室

原文地址:https://www.cnblogs.com/zobol/p/14360090.html