搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 各位lz.帮我解释下有关释放内存的这几点话
标题:
各位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
吹水佬
等 级:
版主
威 望:
432
帖 子:10064
专家分:41463
注 册: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
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-474581-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.021330 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved