21.动态内存管理

简介: 21.动态内存管理

动态内存stdlib.h

作用:让程序员自己来动态的申请空间,更加灵活

存在于堆区

malloc和free

malloc:

申请一块连续可用的空间,并返回指向这块空间的指针

void* malloc(size_t size);

free:

把空间的使用权力还给操作系统,用来做动态内存的释放和回收,只会free给的那一块

使用:

常见错误:

改正:

calloc和realloc

 calloc:自动将申请空间初始化

   malloc和calloc区别只在于calloc会在返回地址之前把申请的空间的每个字节全初始化为0,

如果printf将会得到0 0 0 0 0 0

realloc:对动态开辟内存大小进行调整,让其更加灵活

情况1:直接在原有内存后面追加

情况2:1.到一个新的内存

            2.拷贝

            3.释放旧的内存

            4.返回新的内存

使用:

常见错误

1.对NULL指针的解引用操作

2.对动态开辟空间的越界访问

3.对非动态空间使用free

4.使用free释放一块动态开辟内存的一部分

5.对同一块动态内存多次释放

6.忘记释放(内存泄漏)

动态开辟的空间一定要释放,否则会造成内存泄漏

malloc/ calloc/ realloc 要和 free 成对出现

检查程序忘free了怎么办呢———维护:退出程序,操作系统自动回收

例题:

1.

2.

柔性数组

介绍:

1. 结构体中,最后一个成员 //因为柔性,所以要最后一个

2.是未定义大小的数组

优点:相较于结构体内指针

1.方便内存释放,不用free两次

2.有利于访问速度

 malloc多,内存碎片就会多


目录
打赏
0
0
0
0
8
分享
相关文章
|
5月前
|
动态内存管理
动态内存管理
31 0
动态内存管理(1)
动态内存管理(1)
70 4
|
10月前
|
c++动态内存管理(二)
c++动态内存管理(二)
164 0
动态内存管理(上)
动态内存管理(上)
68 0