踩内存的简单理解
定义:对不属于你的内存进行读写叫踩内存。
分类:根据内存分配机制划分,全局区(.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] 已经踩内存
{ ... }
}
如何定位这类问题:
这类问题指针导致的偏多,可以看下这个地址指向的位置是什么内容,根据内容的大小(例如一个结构体),前后走读关联代码,以及地址属于哪块内存的,大致猜测可能的模块,是否有指针++等等
如何避免类似问题:
首先写代码要规范:局部变量要进行初始化,申请的内存进行初始化,入参要进行判断,释放内存后指针要赋空。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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搭建本