内存怎么泄漏了?

文章讲述了内存泄漏问题的普遍性,包括在Windows与Linux系统中。主要分析了三个关键原因:指针重新赋值导致的内存无法访问,释放结构体时遗忘子空间的释放,以及对返回动态内存函数返回值的不当处理。为防止这些问题,提出了如定义指针常量、彻底释放结构体资源和正确处理函数返回的内存等解决方案。
摘要由CSDN通过智能技术生成
        内存泄漏是很难避免的,不管是老手还是新手,都存在这个问题,甚至 Windows与 Linux 这类系统软件也或多或少存在着内存泄漏。
造成内存泄漏的最关键 原因 有以下:
1 . 指针重新赋值 ,例如
char * p = (char *)malloc(10);
char * np = (char *)malloc(10);
p = np;
这样 p 开始指向的那块内存将无法访问到,造成内存泄漏,可以采用定义指针常量的方式来解决,例如:
char *const p = (char *)malloc(10);
char *const np = (char *)malloc(10);
p = np; //错误,p 为 const,不能改变
这样每个申请的指针便不能指向其他位置了
2. 子空间的遗忘 , 例如
struct RM_ad
{
    char *p;
    int num;
};
int main()
{
    struct RM_ad *s = (struct RM_ad *)malloc(sizeof(struct RM_ad));
    s->p = (char *)malloc(100);
    free(s);
    return 0;
}
        当定义一个结构体时,为结构体里面的子成员申请空间后,先释放结构体指针, 那么子成员所申请的空间将泄漏,所以在对结构体做资源释放的时候应该遍历看各指针成员是否被释放
3. 返回值的不正确处理 . 例如
char *fun()
{
    return (char *)malloc(100);
}

int main()
{
    fun();
    return 0;
}
        以上代码 fun 函数返回了一段申请的空间地址,但是调用者没有正确使用指针去接受它,导致空间泄漏,所以应该始终正确处理返回动态分配的内存引用的函数返回值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九月丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值