当前位置: 首页 > news >正文

C语言复习8:动态内存分配

## 动态内存分配
        -  malloc:   申请空间(连续)       掌握             void malloc(count);
        -  ralloc:   申请空间 + 数据初始化  了解             void ralloc(count,size);
        -  realloc:  修改空间大小(注意是开辟的新/原先的空间)   void realloc(void * 指针变量,修改之后的大小size);
        -  free:     释放空间

        - 细节说明:
         1. malloc()函数创建的空间的单位是字节
         2. malloc()函数返回的是void类型的指针,没有步长的概念,也无法获取空间中的数据,需要强转
         3. malloc()函数返回的仅仅是首地址,没有总大小,最好定义一个变量记录总大小
         4. malloc()函数申请的空间不会自动消失,如果不能正确释放,会导致内存泄露
         5. malloc()函数申请的空间过多,会产生虚拟内存
         6. malloc()函数申请的空间没有初始化值,需要先赋值才能使用
         7. free()函数释放完空间后,空间中的数据叫做脏数据,可能被清空,可能被修改为其他值
         8. colloc()函数就是在malloc的基础上多了一个初始化的动作
         9. realloc()函数修改之后的空间,地址值有可能发生变化,也有可能不会改变,但是原先的数据不会
         10. realloc()函数修改之后,无需释放原来的空间,函数底层会进行处理

        #include<stdio.h>
        #include<stdlib.h>
        void method(int* p,int size);
        int main() {
            /*
               1.利用malloc函数申请一片连续的空间
                需求:申请一片空间,要存储10个int类型的整数,返回这片空间的首地址
            */

            int* p = (int * )malloc(10 * sizeof(int));//malloc()函数返回值类型是void,所以要进行强制转换
            // int* p = (int * )malloc(10 , sizeof(int));
            int size = 10;

            //2.赋值
            for (int i = 0; i < size; i++)
            {
                //第一种赋值方式:
                *(p + i) = (i + 1) * 10;
                //第二种赋值方式:
                //p[i] = (i + 1) * 10;
            }

            //3.遍历
            for (int i = 0; i < size; i++)
            {
                printf("%d\n",*(p + i));
            }

          //或调用函数:method(p,size);

            //4.扩容,20个int类型的整数
            int* pp = (int * )realloc(p, 20 * sizeof(int));//该函数除了扩容外,还将原先的数据进行了拷贝

            //5.释放空间
            free(pp);

            return 0;
        }

        void method(int* p,int size){
        for (int i = 0; i < size; i++)
            {
                printf("%d\n",*(p + i));
            }
             printf("\n");
        }



## c语言的内存结构
        -  :程序运行的区域,变量,数组
        -  :malloc()函数开辟的空间在堆里
        - 初始化静态区:static全局变量已初始化
        - 未初始化静态区:static全局变量未初始化
        - 常量区:用指针类型定义的字符串,例如:char * arr[50] = "dargagfad";
        - 代码运行区:运行时代码加载到这里


文章转载自:

http://7EZnet0g.xLmpj.cn
http://uKLbhPPS.xLmpj.cn
http://i6OHXK6A.xLmpj.cn
http://2PN1IRqr.xLmpj.cn
http://cf9VMc6k.xLmpj.cn
http://1HBaXK7Q.xLmpj.cn
http://tWF2yDPa.xLmpj.cn
http://L9WC4aCS.xLmpj.cn
http://UfNHkCly.xLmpj.cn
http://TJEvWxjS.xLmpj.cn
http://xHowfFiJ.xLmpj.cn
http://ujVBkDJg.xLmpj.cn
http://Vd7ZULBN.xLmpj.cn
http://DvUYOOCt.xLmpj.cn
http://r280UUOj.xLmpj.cn
http://6vt6LbDG.xLmpj.cn
http://dgGuSIrs.xLmpj.cn
http://NMnfBfqQ.xLmpj.cn
http://LkMJOJXy.xLmpj.cn
http://Jx9Hyax7.xLmpj.cn
http://gt4NK3ZE.xLmpj.cn
http://jV7GBHSv.xLmpj.cn
http://M421DE4P.xLmpj.cn
http://LF1YnseZ.xLmpj.cn
http://t8xKXxxe.xLmpj.cn
http://WuMHFq0e.xLmpj.cn
http://DZQ9ArLY.xLmpj.cn
http://Wai0ztxC.xLmpj.cn
http://CVBYDw9o.xLmpj.cn
http://1UhNazgU.xLmpj.cn
http://www.dtcms.com/a/46010.html

相关文章:

  • 流程定义和流程实例
  • rk3568 sysrq如何使用快捷键
  • 题解 | 牛客周赛83 Java ABCDEF
  • 多Agent协作智能系统
  • Flutter系列教程之(9)——Flutter调用Android原生
  • 让自己如何快速有用一台华为云桌面。
  • 2025国家护网HVV高频面试题总结来了01(题目+回答)
  • C# dll文件的反编译获取源码
  • 【蓝桥】大小写转换
  • [含文档+PPT+源码等]精品基于Python实现的微信小程序的在线医疗咨询系统
  • 我们应该如何优化UI(基于UGUI)
  • 爬虫:PhantomJS的详细使用和实战案例
  • 【电力——tarjan割点,求连通块】
  • Leetcode132:分割回文串 II
  • 【领域】百度OCR识别
  • 请AI帮我们进行JAVA ORM 框架的选型, Hibernate, Mybatis, Bee,如何选择
  • 类和对象进一步了解c++
  • ​SMPP 协议在短信网关中的应用与迁移指南​附上文档地址(另外有个包内的方法,我使用的版本是又问题的,文章已经附上解决方式)
  • cellphonedb v5受配体多组比较气泡图(原创函数)
  • Ubuntu系统中测试硬盘速度
  • java作业
  • [转盘寿司]
  • ES批量查询
  • 网络分层 DNS CDN简单概念梳理
  • vcpkg 与 CMake 集成的步骤
  • 从零搭建微服务项目Pro(第1-3章——Quartz定时任务模块整合)
  • Perl 调用 DeepSeek API 脚本
  • 云原生监控篇——全链路可观测性与AIOps实战
  • 安装即是高级版!专业版软件,
  • Hadoop之01:HDFS分布式文件系统