什么是踩内存?
读写不属于自己的内存就是踩内存,而解决踩内存的方法就是先找出何处代码踩了内存,然后再仔细检查代码逻辑修复问题。找出何处代码踩了内存通常很难,因为通常踩内存和程序崩溃没有任何关系,这导致踩内存问题很难调试,必须深入了解踩内存原理才能解决它。
如下图所示,在发生踩内存时,不一定马上奔溃,若是马上奔溃的就可直接找到何处代码踩了内存了,直接进行代码逻辑检查就行了。比较麻烦的在于程序奔溃点在之后的某个时间出现。P和C没有任何关系,因此要解决踩内存的关键点在于如何从C推到P,也就是研究当下C点内存踩坏的情况来判断可能的原因。
了解内存踩坏的情况对C到P的推导至关重要。
1. 根据被踩坏内存和自己内存关系可分以下五类:
1.1. 越界踩内存:
1.1.1. 被踩坏内存在自己内存旁边,只是因为申请或定义的内存小了引起的。如:
--- 申请内存小了:
char *p;