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


相关文章
|
编译器
【动态内存管理】
【动态内存管理】
66 0
|
1月前
|
存储 缓存 C语言
【c++】动态内存管理
本文介绍了C++中动态内存管理的新方式——`new`和`delete`操作符,详细探讨了它们的使用方法及与C语言中`malloc`/`free`的区别。文章首先回顾了C语言中的动态内存管理,接着通过代码实例展示了`new`和`delete`的基本用法,包括对内置类型和自定义类型的动态内存分配与释放。此外,文章还深入解析了`operator new`和`operator delete`的底层实现,以及定位new表达式的应用,最后总结了`malloc`/`free`与`new`/`delete`的主要差异。
52 3
|
2月前
|
程序员
动态内存管理
动态内存管理
18 0
|
C语言 Python
动态内存管理(下)
动态内存管理(下)
59 0
|
7月前
|
编译器 程序员 C语言
动态内存管理(超详细!)
动态内存管理(超详细!)
64 2
|
7月前
|
程序员 C语言 C++
详解动态内存管理!
详解动态内存管理!
|
程序员 编译器
动态内存管理-1
动态内存管理
57 0
|
程序员 编译器 C语言
动态内存管理总结
动态内存管理总结
58 0
|
程序员 C语言 C++
动态内存管理-2
动态内存管理
50 0
|
C语言 C++
C++中的动态内存管理
C++中的动态内存管理