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


相关文章
|
10月前
|
编译器
【动态内存管理】
【动态内存管理】
49 0
|
7天前
|
程序员 编译器 C语言
|
2月前
|
程序员 C语言 C++
动态内存管理(2)
动态内存管理(2)
28 1
|
3月前
|
程序员 编译器 C语言
带你彻头彻尾了解『动态内存管理』
带你彻头彻尾了解『动态内存管理』
|
9月前
|
C语言 Python
动态内存管理(下)
动态内存管理(下)
41 0
|
3月前
|
编译器 程序员 C语言
动态内存管理(超详细!)
动态内存管理(超详细!)
37 2
|
3月前
|
存储 安全 算法
c++动态内存管理(一)
C++ 动态内存管理 在 C++ 中,动态内存管理是一个核心概念,它允许在运行时分配和释放内存。以下是 C++ 动态内存管理需要掌握的关键知识点:
140 0
|
9月前
|
C语言
动态内存管理(上)
动态内存管理(上)
35 0
|
12月前
|
程序员 编译器 C++
【C】动态内存管理详解
C/C++程序内存分配的几个区域: 1.栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内容量有限。 栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。 2.堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。分配方式类似于链表。 3.数据段(静态区)(static)存放全局变量、静态数据。程序结束后由系统释放。 4.代码段:存放函数体(类成员函数和全局函数)的二进制代码。
【C】动态内存管理详解
|
11月前
|
编译器 C++
动态内存管理详解
动态内存管理详解
104 0