| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1078 人关注过本帖
标题:各位lz.帮我解释下有关释放内存的这几点话
只看楼主 加入收藏
啊蒋
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2017-2-26
结帖率:70%
收藏
已结贴  问题点数:10 回复次数:7 
各位lz.帮我解释下有关释放内存的这几点话
在释放指针指向的堆内存时必须确保它不被另一个地址覆盖,能帮我用个例子解释下吗?
还有就是如果多个指针变量引用已分配的内存,就有可能释放两次相同的内存,能给个小例子解释下吗
2017-02-27 09:44
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:2 
#include<stdio.h>

int main(void)
{
    int *p = malloc(10);
    int *p1 = malloc(10);
    int *p2 = p1;
    int a[10] = { 0 };
    p = a;
    free(p);//这里的p的地址已经被a覆盖了。

    free(p1);
    free(p2);//重复释放同一个内存地址p1

    return 0;
}
2017-02-27 10:28
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:2 
回复 2楼 grmmylbs
p一开始指向的动态分配的内存块并没有被释放吧
2017-02-27 10:36
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:2 
分配和释放时用一个固定的指针,运算时用其他什么指针无所谓,总之最后都不用时就用“固定的指针”释放。
如:
char *p = malloc(10); //分配
char *p2 = p;    //使用
p2++;    //运算
*p2 = 'a';
free(p);    //释放
2017-02-27 11:12
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:2 
就是改变了申请内存块所提供的首地址free就会出问题~


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-27 11:33
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:2 
回复 4楼 吹水佬
如果free(p2)为什么不行呢?两个指针指向的地址不是共同的吗?
2017-02-27 13:16
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
收藏
得分:2 
详细的不清楚,不过在某课程里说过,编译器是记住这个由malloc申请而来的地址,你提交free里的地址没对上,就不干了。
2017-02-27 14:22
啊蒋
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2017-2-26
收藏
得分:0 
非常感谢各位
2017-02-27 16:42
快速回复:各位lz.帮我解释下有关释放内存的这几点话
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032578 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved