动态内存面试的经典题目

发布时间:2024年01月16日

𝙉𝙞𝙘𝙚!!👏🏻???????👏🏻??????? 👏🏻?????:Solitary-walk

? ? ? ?? ? ━━━┓
? ? ?- 个性标签 - :来于“云”的“羽球人”。 Talk is cheap. Show me the code
┗━━━━━━━ ?? ?

本人座右铭 : ? 欲达高峰,必忍其痛;欲戴王冠,必承其重。

👑💎💎👑💎💎👑?
💎💎💎自💎💎💎
💎💎💎信💎💎💎
👑💎💎 💎💎👑 ? ?希望在看完我的此篇博客后可以对你有帮助哟

👑👑💎💎💎👑👑 ? 此外,希望各位大佬们在看完后,可以互赞互关一下,看到必回
👑👑👑💎👑👑👑


前言:

各位老铁们,咱可千万不要忽视动态内存相关知识点的学习,因为后期数据结构主要是在内存上进行数据的管理,这就不可避免的用到动态内存的知识点,而且很容易出现内存的报错

所以对这方面的练习是不可避免滴

?题目一:

?来看一下这个程序能否正常跑起来?那么输出的结果是啥?若是不能那么这个程序面临什么问题?

?分析如下:

1)代码第11行:并没有实现为str开辟空间

? 这就涉及到了传值传参的问题:因为想要改变str这个指针变量的值,我需要传对应的地址 &str ,而不是传str这个变量

2)代码第12行:对空指针的解引用

因为此时str是指向NULL

3)内存泄漏:malloc出来的空间没有释放

4)最终:程序并不会打印? hello world?

改正之后的程序

?

?题目二:

?

?对于这个问题:我相信会有一些老铁们说这不就打印 hello world?

分析如下:

?典型问题:返回栈空间地址

1)返回栈空间地址:对于GetMemmory函数里的数组p(局部变量),当出了GetMemory函数,p指向的那个空间就会还给系统,原有的内容覆盖掉

2)非法访问:代码第34行

此时str仍然是可以拿到p对应的那个地址(虽然p指向的空间还给系统,但p没有置空),这时就造成非法访问了

?题目三:

分析如下:

相信在对题目一的理解,这个自然就so easy

程序可以正常运行

注意:对于堆上开辟出来的空间(动态开辟的)要不free释放要么就是程序结束自动释放

但是有没有想过这样一个问题:对于那种 7*24小时跑的程序会释放空间吗?这不就造成内存泄露了嘛

内存泄漏:malloc出来的空间忘记释放

?题目四:

分体如下:

?非法访问:代码第60行

str本省已经被free了,他所指向下那块空间已经归还给了系统,但是str并没有置空,所以代码60再次对他进行访问,就造成了非法访问

但是有老铁就说了,那为什么程序可以正常打印world呢?

这就涉及到了函数栈帧的创建与销毁的知识了

可能是:此时str指向的空间还给系统之后,恰巧赶上没有其他的占用

?结语:

相信大家对动态内存管理应该有了自己的一定了解了吧,希望给位老铁可以有自己的一个新的体悟。

文章来源:https://blog.csdn.net/X_do_myself/article/details/135615487
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。