|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 各位lz.帮我解释下有关释放内存的这几点话
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
1078
人关注过本帖
标题:
各位lz.帮我解释下有关释放内存的这几点话
只看楼主
加入收藏
啊蒋
等 级:
新手上路
帖 子:31
专家分:0
注 册:2017-2-26
结帖率:
70%
楼主
收藏
已结贴
√
问题点数:10 回复次数:7
各位lz.帮我解释下有关释放内存的这几点话
在释放指针指向的堆内存时必须确保它不被另一个地址覆盖,能帮我用个例子解释下吗?
还有就是如果多个指针变量引用已分配的内存,就有可能释放两次相同的内存,能给个小例子解释下吗
2017-02-27 09:44
举报帖子
使用道具
赠送鲜花
grmmylbs
等 级:
贵宾
威 望:
54
帖 子:1409
专家分:5845
注 册:2016-2-14
第
2
楼
收藏
得分: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
等 级:
职业侠客
威 望:
2
帖 子:104
专家分:372
注 册:2017-2-7
第
3
楼
收藏
得分:2
回复 2楼 grmmylbs
p一开始指向的动态分配的内存块并没有被释放吧
2017-02-27 10:36
举报帖子
使用道具
赠送鲜花
吹水佬
等 级:
版主
威 望:
451
帖 子:10607
专家分:43186
注 册:2014-5-20
第
4
楼
收藏
得分:2
分配和释放时用一个固定的指针,运算时用其他什么指针无所谓,总之最后都不用时就用“固定的指针”释放。
如:
char *p = malloc(10); //分配
char *p2 = p;
//使用
p2++;
//运算
*p2 = 'a';
free(p);
//释放
2017-02-27 11:12
举报帖子
使用道具
赠送鲜花
九转星河
来 自:长长久久
等 级:
贵宾
威 望:
52
帖 子:5023
专家分:14003
注 册:2016-10-22
第
5
楼
收藏
得分:2
就是改变了申请内存块所提供的首地址free就会出问题~
[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-27 11:33
举报帖子
使用道具
赠送鲜花
yangfrancis
等 级:
贵宾
威 望:
141
帖 子:1510
专家分:7661
注 册:2014-5-19
第
6
楼
收藏
得分:2
回复 4楼 吹水佬
如果free(p2)为什么不行呢?两个指针指向的地址不是共同的吗?
2017-02-27 13:16
举报帖子
使用道具
赠送鲜花
kin3z
等 级:
职业侠客
威 望:
4
帖 子:157
专家分:390
注 册:2011-4-24
第
7
楼
收藏
得分:2
详细的不清楚,不过在某课程里说过,编译器是记住这个由malloc申请而来的地址,你提交free里的地址没对上,就不干了。
2017-02-27 14:22
举报帖子
使用道具
赠送鲜花
啊蒋
等 级:
新手上路
帖 子:31
专家分:0
注 册:2017-2-26
第
8
楼
收藏
得分:0
非常感谢各位
2017-02-27 16:42
举报帖子
使用道具
赠送鲜花
8
1/1页
1
快速回复:
各位lz.帮我解释下有关释放内存的这几点话
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.032578 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved