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

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

1.这里总结动态内存管理里面的错误

(1)使用malloc开辟空间以后直接赋值

这个就是malloc开辟失败返回空指针,直接给空指针赋值就是错误的,

tip1:使用malloc开辟空间以后一定要判断是否为空

(2)

越界访问:一共20字节,一循环20*4=80字节,造成越界访问

(3)释放非动态开放

(4)释放动态内存的一部分

这里指针虽然移动了,但是不能从中间某个位置开始释放,只会从头

(5)对一块空间多次释放

这个的解决方案就是及时置为NULL,这样第二次的释放就不起作用了

(6)内存忘记释放(内存泄露)

动态内存空间,只有2种方式还回去,一种是free释放,2是程序退出

这个在函数里面,出作用域以后就没了,所以会出现内存泄漏,应该及时释放,或者让主函数知道

2.笔试题目

#######(1)

传递str变量本身,只有把地址取出来才是传递地址

--1.getmemory里面的形参开辟了空间,但是对test里面的实参没有影响

---2.这里面相当于对空指针解引用,程序会崩溃,因为要想拷贝,就要*dest=*src,相当于对空指针

进行解引用操作

---3.开辟的空间,没有释放,存在内存泄漏

----4.printf(str)实际上给的是首个元素的地址,所以跟打印字符串的效果是一样的

这个是修改方案

(1)这里无非就是想把开辟的80字节给str,我们传地址就可以了,然后使用二级指针进行接收

(2)这样传递地址就可以把80字节空间给str,这个时候我们依然可以释放空间,置为空指针

######2.

(1)显然,这里是随机值,

(2)数组名是数组首个元素的地址,p向内存申请空间,返回地址,我们可以知道地址,可以找到

这块空间,但是他的生命周期结束,内存还给操作系统,访问就相当于野指针。

(3)这种问题就是访问栈空间的地址问题,其实最简单的就是局部变量,如下:

########3.

这里是可以输出的,问题就是没有free释放,释放之后置为空指针,打印之后应该释放掉;

#######4.

(1)开辟100字节空间,但是释放之后需要置为空指针

3.脑图

4.内存区域分配

在栈区创建,会自动销毁,但是malloc,realloc等开辟的空间放在堆区,需要程序员手动释放

普通的局部变量在栈区开辟空间,static修饰了以后放在数据段,也就是静态区,这些在程序结束

才会销毁,所以他的生命周期比较长。

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