小工具知识网

当前位置: 首页 > 行业知识 > C:动态内存相关知识点整理:

行业知识

C:动态内存相关知识点整理:

2026-11-12 18:57:52 来源:互联网转载

动态内存:

#include

()

前提引入:

  • 局部变量储存在 栈空间,vs2022 内分配 (1024*1024)=1m 大小,超过此大小程序崩溃
  • char* s = strtok(buff, " ");//当指针定义在外部函数时,为函数内部的局部变量,函数结束时会结束生命周期,即使return *指针,也无法实现返回内容,则适用于使用动态申请定义指针,则在free()前可以全局使用
  • 动态内存储存在 堆空间,分配较大内存,适用于定义大容量(1G左右)
  • 动态内存申请连续内存

    malloc

    参数:只需要申请空间的大小 n

    ()

    (void*)malloc( n * sizeof(--) );

    内存充裕时,返回申请成功的指针,否则返回NULL (assert 断言不为NULL);

    calloc

    (void*)calloc( n , sizeof(--) );

    对比malloc 没有默认值,而calloc 申请的内容,指针指向默认初始值都为0

    memset(指针,0,字节总数);//重新初始化全部为0

    扩容:realloc

    malloc\calloc 申请内存不够使用时,再次申请扩大需要的内存

    (void*)realloc( 原申请指针 , size(更大的总内存字节大小) );

    size:需要分配的总内存大小,不是重新添加的大小

    返回值:!!接受新的申请地址

    free:

    释放申请的内存,否则出现内存泄漏(申请后未使用、未释放,导致其他程序无法使用)

    泄露的内存回收:

    • 在程序(进程)结束后回收
    • 关机(重启)

      内存泄漏非常严重的错误:难发现、难修改

      • #include 在内存泄漏时报告,需要插件 /桌面/学习/C/vld

        free() 导致程序崩溃是为什么?

        1. 写入内容超过申请内存大小:越界;
        2. 使用过程,申请的返回指针使用时移动    eg: P++;作为数组使用P[i++],无影响
        3. 重复释放同一内存,free两次

        const

        作用 :

                定义常量(不能修改,不能改写).

                例如 const int ca = 10; ca=20;//error

        特点:

        • 基本类型对于const透明.    例如 int double char......

                  const int ca = 10; 等价 int const ca = 10;

          • const限定它的"直接"右边
            1. const int *p; 类型可自动忽略,只限定” *p “ 单独则代表指针解引用->值 不可变
            2. int * const p; 类型可自动忽略,只限定 ” p “ 单独则代表指针地址   ->地址 不可变
            • 其主要应用场景:如果形参是指针,同时不允许修改实参的值,那么在指针前面加const
              • 权限在传递时可以同等传递,也可以缩小传递,但不能扩大 ->我可读,传递给他人也仅可读,他人不可写(权力放大)

上一篇:服务器光驱硬盘怎么安装?

下一篇:揭秘易语言源码,轻松提取QQ群号码秘籍!