zoukankan      html  css  js  c++  java
  • 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的魔法藏书室

  • 相关阅读:
    hdu 2896 AC自动机模版题
    快递公司送货员送到货时,打电话通知客户来取的改进
    Scala数据类型中的Symbol(符号文本)
    hdu 3065 AC自动机模版题
    Oracle DB 复制数据库
    Java打包生成exe(使用exe4j和inno setup)
    C#的Lambda表达式嵌套例子
    WPF设置控件获得焦点FocusManager
    Winform给TextBox设置默认值(获取焦点后默认值消失)
    使用signtool.exe来验证程序的数字签名是否成功(命令行)
  • 原文地址:https://www.cnblogs.com/zobol/p/14360090.html
Copyright © 2011-2022 走看看