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多,内存碎片就会多


相关文章
|
1月前
|
程序员 编译器 C语言
|
3月前
|
程序员 C语言 C++
动态内存管理(2)
动态内存管理(2)
30 1
|
4月前
|
程序员 编译器 C语言
带你彻头彻尾了解『动态内存管理』
带你彻头彻尾了解『动态内存管理』
|
10月前
|
C语言 Python
动态内存管理(下)
动态内存管理(下)
48 0
|
9月前
|
程序员 编译器 C语言
动态内存管理总结
动态内存管理总结
50 0
|
9月前
|
程序员 C语言 C++
动态内存管理-2
动态内存管理
35 0
|
10月前
|
C语言 C++
C++中的动态内存管理
C++中的动态内存管理
|
10月前
|
编译器 文件存储 数据库
Day_17> 动态内存管理
Day_17> 动态内存管理
|
10月前
|
程序员 编译器 C语言
动态内存管理(上)
动态内存管理(上)
38 0
|
10月前
动态内存管理(下)
动态内存管理(下)
32 0