当前位置: 首页 > 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";
        - 代码运行区:运行时代码加载到这里

相关文章:

  • 流程定义和流程实例
  • 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系统中测试硬盘速度
  • 我要浏览国外网站怎么做/链接是什么意思
  • 做网站之前需要准备什么条件/苏州网站制作
  • 南昌哪里有网站建设/暴疯团队seo课程
  • 叫別人做网站靠谱吗/怎么做好网络营销推广
  • 443是端口网站建设/超级外链吧外链代发
  • 建设网站哪家最好/新闻今天