C语言-----动态内存管理(1)

简介: C语言-----动态内存管理(1)

1.引入

我们之前已经学习了几种开辟内存空间的方式:

(1)int a=10;开辟4个字节大小的空间

(2)int arr[10]={0}定义数组开辟了一串连续的空间

2.malloc和free

(1)malloc开辟内存空间可能会失败,因此需要检查是否为空指针

(2)malloc返回void*类型,指针p是int*类型,因此需要强制类型转换

(3)malloc申请到空间以后,直接返回这块空间的起始地址,不会初始化空间的内容

(4)malloc申请的空间,只有程序退出的时候才会还给操作系统,当程序不退出的时候,动态申请的内存,需要使用free释放空间

(5)free释放空间之后,需要及时的置为空指针

(6)free,malloc的声明都放在stdlib.h的头文件里面的;

3.calloc

(1)这个函数和malloc用法基本相同,不同的地方就是参数不同,这个有2个参数,第一个是个数(徐要开辟空间的个数),第二个就是单个空间的大小

(2)这个函数不像malloc函数,返回空间起始地址,这个会初始化全部为0;

4.realloc

(1)realloc也有2个参数,它可以随时改变我们申请的内存空间的大小,因为有的时候我们申请的

内存空间可能会不够

(2)这里是原来申请40字节的空间,后来改成了80字节;

这里会有2种情况,

-----1.与之相邻的连续空间足够可以容纳80字节

-----2.与之相邻的连续空间不够,这个时候会重新开辟80字节空间,把原来的40字节空间里面的数

据复制过去,然后是释放掉原来的空间(这个释放不需要我们自己进行)

(3)如果是重新开辟80字节的空间,就有可能开辟失败,这个时候如果我们直接给p,就有可能

原来的空间不见了,新的空间也没有,造成内存的泄露

(4)我们先给ptr指针,如果这个不是NULL,我们再传给p,就可以避免上面的内存泄漏问题了

(5)如果realloc里面的第一个参数是空指针,他的功能就和malloc完全相同

相关文章
|
26天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
31 3
|
11天前
|
C语言
【c语言】动态内存管理
本文介绍了C语言中的动态内存管理,包括其必要性及相关的四个函数:`malloc`、``calloc``、`realloc`和`free`。`malloc`用于申请内存,`calloc`申请并初始化内存,`realloc`调整内存大小,`free`释放内存。文章还列举了常见的动态内存管理错误,如空指针解引用、越界访问、错误释放等,并提供了示例代码帮助理解。
24 3
|
27天前
|
编译器 程序员 C语言
深入C语言:动态内存管理魔法
深入C语言:动态内存管理魔法
|
1月前
|
存储 程序员 编译器
C语言——动态内存管理与内存操作函数
C语言——动态内存管理与内存操作函数
|
1月前
|
程序员 C语言
C语言内存函数精讲
C语言内存函数精讲
|
13天前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
14 0
|
22天前
|
C语言
保姆级教学 - C语言 之 动态内存管理
保姆级教学 - C语言 之 动态内存管理
16 0
|
27天前
|
存储 C语言
深入C语言内存:数据在内存中的存储
深入C语言内存:数据在内存中的存储
|
27天前
|
C语言 C++
c语言回顾-内存操作函数
c语言回顾-内存操作函数
39 0
|
29天前
|
存储 C语言 C++
来不及哀悼了,接下来上场的是C语言内存函数memcpy,memmove,memset,memcmp
本文详细介绍了C语言中的四个内存操作函数:memcpy用于无重叠复制,memmove处理重叠内存,memset用于填充特定值,memcmp用于内存区域比较。通过实例展示了它们的用法和注意事项。
61 0