踩内存的简单理解
定义:对不属于你的内存进行读写叫踩内存。
分类:根据内存分配机制划分,全局区(.data/.bss),堆,栈踩的内存。
全局区:
int array[10]; //全局变量
void function()
{
for(i = 0; i <=10; i++) //array的范围为[0~9],这里array[10] 已经踩内存
{ ... }
}
堆内存:
char *p = NULL;
p = malloc(5);
strcpy(p, "hello"); //带‘/0’一共6个字节,但申请的5个,所以p将多余的一个字节踩坏,可能会影响到后续程序
栈内存:
void function()
{
int array[10]; //局部变量
for(i = 0; i <=10; i++) //array的范围为[0~9],这里array[10] 已经踩内存
{ ... }
}
如何定位这类问题:
这类问题指针导致的偏多,可以看下这个地址指向的位置是什么内容,根据内容的大小(例如一个结构体),前后走读关联代码,以及地址属于哪块内存的,大致猜测可能的模块,是否有指针++等等
如何避免类似问题:
首先写代码要规范:局部变量要进行初始化,申请的内存进行初始化,入参要进行判断,释放内存后指针要赋空。

浙公网安备 33010602011771号