解引用已经释放的内存#include <stdlib.h>int main() {int* ptr = (int*)malloc(sizeof(int));free(ptr);*ptr = 10;return 0;}
其实上面的代码不见得一定会产生 sementation fault 因为我们使用的libc给我们提供的 free 和 malloc 函数,当我们使用 free 函数释放我们的内存的时候,这部分内存不一定就马上还给操作系统了,因此在地址空间当中这部分内存还是存在的,因此是可以解引用的 。
其他方式我相信你肯定还有很多其他的方式去引起 sementation fault 的,嗯相信你!!!
造成 sementation failt 的原因主要有以下两大类:
- 读写没有权限的位置:
- 比如说前面对只读数据区的写操作,或者读写内核数据等等 。
- 使用没有分配的页面:
- 比如数组越界,就是访问一个没有分配的页面 。
- 解引用空指针或者野指针或者没有初始化的指针,因为空指针或者野指针指向的地址没有分配 。
- 不正确的使用解引用和取地址符号,比如你在使用scanf的时候没有使用取地址符号,也可能造成segmentation fault 。
- 栈溢出,这个是操作系统规定的栈的最大空间 。
以上就是本篇文章的所有内容了,我是LeHung,我们下期再见!!!更多精彩内容合集可访问项目:https://github.com/Chang-LeHung/CSCore
关注公众号:一无是处的研究僧,了解更多计算机(Java、Python、计算机系统基础、算法与数据结构)知识 。
经验总结扩展阅读
- 十字国旗有哪些
- 火灾会带来哪些危害
- 三星Neo QLED电视有哪些优点_三星Neo QLED电视使用评测
- 皮肤消毒液有哪些品种
- 温水洗脸的好处有哪些?
- 原神赛诺传说任务哪些地方有宝箱
- 骁龙888 Plus和骁龙888的区别_有哪些升级
- 2023舞蹈生最吃香的专业 就业方向有哪些
- 2023高职就业前景好的专业 哪些专业好就业
- 会用微笑来面对你的无理取闹的星座男