踩内存的简单理解

定义:对不属于你的内存进行读写叫踩内存。

分类:根据内存分配机制划分,全局区(.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] 已经踩内存

  { ... }

}

如何定位这类问题:

这类问题指针导致的偏多,可以看下这个地址指向的位置是什么内容,根据内容的大小(例如一个结构体),前后走读关联代码,以及地址属于哪块内存的,大致猜测可能的模块,是否有指针++等等

如何避免类似问题:

首先写代码要规范:局部变量要进行初始化,申请的内存进行初始化,入参要进行判断,释放内存后指针要赋空。

posted @ 2020-11-30 15:17  _Show  阅读(1905)  评论(0)    收藏  举报