内存损坏(memory_corruption)

内存损坏

内存损坏是最棘手的编程错误类别之一,原因有两个:

  1. 内存损坏的来源及其表现可能相差甚远,因此很难将原因与效果联系起来。
  2. 症状出现在异常情况下,很难一致地重现错误。

内存损坏错误大致可分为四类:

  1. 使用未初始化的内存未初始化的内存的内容被视为垃圾值。使用此类值可能会导致不可预测的程序行为。
  2. 使用非拥有内存:通常使用指针来访问和修改内存。如果这样的指针是空指针,悬空指针(指向已经被释放的存储器),或者指向当前堆栈或边界之外的存储器位置,则它指的是程序不具有的存储器。使用这样的指针是一个严重的编程缺陷。访问此类内存通常会导致操作系统异常,这通常会导致程序崩溃(除非使用合适的内存保护软件)。
  3. 使用超出分配的内存的内存(缓冲区溢出):如果在循环中使用数组,并且终止条件不正确,则可能会意外地操作超出数组边界的内存。缓冲区溢出是计算机病毒利用的最常见的编程漏洞之一,在广泛使用的程序中导致严重的计算机安全问题(例如,返回libc攻击堆栈粉碎保护)。在某些情况下,程序也可能在启动缓冲区之前错误地访问内存。
  4. 堆内存管理错误:内存泄漏和释放非堆或未分配的内存是错误的堆内存管理导致的最常见错误。

许多内存调试器(如PurifyValgrindInsure ++Parasoft C / C ++测试AddressSanitizer)可用于检测内存损坏错误。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 基础知识 1.1、 基本概念、 功能 冯诺伊曼体系结构1、计算机处理的数据和指令一律用二进制数表示2、顺序执...
    yunpiao阅读 5,507评论 1 22
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,173评论 1 32
  • 内存的历史 现代的intel处理器可以追溯到最早期的intel芯片。1.8085处理器充分利用了芯片整合技术,它将...
    Mr_Bluyee阅读 772评论 0 0
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,419评论 11 349
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,776评论 0 4