关于数组越界(内存泄漏)的那点事儿(C语言)

  数组越界在C语言是一个很常见的问题,但是也正是因为它很常见,有时候也会出现一些不可思议,难以理解的情况,就像下面这样。

情形如下:

如果难以理解,我们来打印一下数组a每个节点的地址以及num的地址。

如下:

  我们可以看到,当数组a循环到a[12]的时候与num的地址完全相同。从而覆盖了num已有的值12,变成a[ ] = 0的值,即0。重新累加。
  我们思考可以发现,此时num跟a[9]相差8个字节的偏移量。那么我们会想,不管num是任意数据类型,都会只差8个字节的大小呢?

  因此我做了以下实验:

  发现此时相差12个字节的偏移量,因此并不是固定且有规律只相差8个字节的偏移量,与num的数据类型是相关联的。

总结:内存是连续的线性排布。且与编译器处理的安全隔离相关联。(编译器不同处理方式可能不同)

关于数组越界(内存泄漏)的那点事儿(C语言)相关推荐

  1. 内存泄漏一招搞定:valgrind

    1.概述 1.1 .介绍 Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合.Valgrind由内核(core)以及基于内核的其他调试工具组成.内核类似于一个框架(fr ...

  2. 内存泄漏检测工具valgrind神器

    1.1 介绍 Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合.Valgrind由内核(core)以及基于内核的其他调试工具组成.内核类似于一个框架(framewor ...

  3. 关于C语言的malloc函数以及内存泄漏的问题

    malloc函数 malloc函数的原型: (void *)malloc(int size) malloc函数的返回值是一个void类型的指针,参数为int类型的数据,即申请分配的内存大小,单位是字节 ...

  4. Detected memory leaks!内存泄漏,溢出,内存越界问题分析

    应用程序发生 Detected memory leaks!内存泄漏 一直程序员面对的是一个很痛苦的问题,要查出泄漏的地方有时候需要大半天甚至更长时间.这里讲讲我的一些查找内存泄漏以及避免内存泄漏的一些 ...

  5. C语言数组越界和内存分布

    事情经过 11月3日晚,今天遇到了一个神奇的现象,一个大小为10的数组可以容纳200个数据,直接震惊我了! 今天发11月2日的参考代码,有一个同学给我看他的代码,大概是这样的 int main(){i ...

  6. 【内存】内存检测工具sanitizer[内存泄漏、内存越界] VS valgrind

    简介 Sanitizers是谷歌发起的开源工具集,包括了AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer,Saniti ...

  7. 内存泄漏、内存溢出、内存越界、段错误、堆溢出、栈溢出

    内存泄露 内存泄漏(memory leak)是应用程序分配某段内存后,由于疏忽或者错误,失去了对该段内存的控制,因而造成了内存的浪费. 或者可以说向系统申请分配内存进行使用(new),但是用完后不归还 ...

  8. 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )

    文章目录 一.判定指针合法性 二.数组越界 三.不断修改指针变量值 四.函数中将栈内存数组返回 五.函数间接赋值形参操作 六.指针取值与自增操作 一.判定指针合法性 判定指针合法性时 , 必须进行如下 ...

  9. linux踩内存内存越界,Linux如何调试内存泄漏?超牛干货奉献给你(代码全)

    内存泄漏是指由于疏忽或错误造成程序未能释放已经不再使用的内存.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存 ...

  10. 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?...

    五条基本规则: 1.如果基类已经插入了vptr, 则派生类将继承和重用该vptr.vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的 ...

最新文章

  1. ARM 寄存器 和 工作模式了解
  2. CLEARTEXT communication to xxx not permitted by network security policy
  3. QT消息/事件循环机制与多线程的关系
  4. 数据库更改到Java环境中实现可持续和平
  5. lucene学习之helloworld(简单实例)
  6. Crazypony四轴飞行器代码框架
  7. [BZOJ3124]直径
  8. HISI3536安装交叉编译工具链
  9. 虚拟机安装Mac系统
  10. 图论与代数结构 最短路问题
  11. 【爬虫】python 微博评论数据分析
  12. Win8仿Win10无边框效果的实现
  13. 开发者需要什么样的技术社区?
  14. 核心竞争力和壁垒 | 讲概念
  15. ubuntu 20.04 安装百度网盘
  16. 查看计算机远程端口,如何查看服务器远程端口号.doc
  17. leetcode系列-链表
  18. 【ERROR】INSERT 语句与 CHECK 约束CK__Student__Ssex__6EF57B66冲突。
  19. 必读的AI和深度学习博客
  20. 物理学转行?读了四年物理学,优势在哪里?

热门文章

  1. 近期有哪些值得读的QA论文?
  2. torch--[Pytorch函数] .masked_fill_() ;关于pytorch中@和*的用处
  3. python--List extend()方法
  4. Datawhale编程学习之图(6)
  5. 回顾2020年那些“领域第一本”,每一本都强烈推荐!
  6. 前瞻设计:创新型战略推动可持续变革(全彩)
  7. 文件——rstrip() 、lstrip()和 strip()、zip() 函数
  8. Mysql中Check约束无效的原因以及解决方法
  9. PyTorch:tensor-基本操作
  10. python类:class创建、数据方法属性及访问控制(下划线)