踩内存的简单理解

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

分类:根据内存分配机制划分,全局区(.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 @   _Show  阅读(1790)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示