| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1178 人关注过本帖
标题:求助有关malloc的一个小问题!
只看楼主 加入收藏
duwn124
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2010-8-10
结帖率:77.78%
收藏
已结贴  问题点数:10 回复次数:13 
求助有关malloc的一个小问题!
我在程序中动态分配了一个空间存放一浮点数并输出测试,后来将改空间释放了,为什么还能够继续访问呢?是不是说虽然释放了,但原指针p还依然指向之前申请的空间,还能继续进行读写?请各位高人指点一下,谢谢!
测试程序如下:
#include<alloc.h>
main()
{
    float *p;
    p=(float *)malloc(sizeof(float));
    if(p==NULL)
        {
            printf("Out of memory.\n");
            exit(0);
        }
    *p=23.5;
    printf("%f\n",*p);
    free(p);
    *p=55.5;
    printf("%f\n",*p);
    getch();
}
搜索更多相关主题的帖子: malloc 
2010-08-13 17:09
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:2 
所以说 free()后, 要将指针置为 NULL嘛。/

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2010-08-13 17:21
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:2 
在我理解,释放只是把这一地址编入可用地址空间中去,能再分配给其他变量,
还是可以操作的,只是它可能被分配给其他变量,如果不把指针变量置零,后果可能不堪设想

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2010-08-13 20:58
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:2 
释放了就是野指针,不是能不能读写的问题,是应不应该读写的问题。
2010-08-13 23:23
crazysand
Rank: 2
等 级:论坛游民
帖 子:3
专家分:24
注 册:2010-8-14
收藏
得分:2 
free(p);
*p=55.5;
释放p指向的内存空间后,再给p指向的空间存放数据时很危险的事情,因为p指向的空间可能存放其他数据,如果这样,p就会修改次数据,造成其他程序或者甚至系统问题。
2010-08-14 01:35
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:2 
释放了内存之后,只是说系统把这片内存作为空闲内存了,可以在以后的操作中使用。
而且系统通常不会马上把里面的内容释放掉,但这不是肯定的。
另外虽然说指针指向的内存被释放了,但是指针变量里存放值(也就是那片内存的首地址)还是存在的。
所以你这样操作似乎可以,但是这必然造成后续程序运行过程中出现不可预测的问题。
2010-08-14 10:18
duwn124
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2010-8-10
收藏
得分:0 
学到东西了,多谢各位!
2010-08-14 16:07
carmeloyin
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
帖 子:161
专家分:157
注 册:2008-12-2
收藏
得分:0 
我还是不明白
那么岂非每次申请1个指针都必须malloc free?
不然就占着空间,即使我不malloc的指针也会占着空间不放?
2010-08-14 17:57
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:0 
以下是引用carmeloyin在2010-8-14 17:57:21的发言:

我还是不明白
那么岂非每次申请1个指针都必须malloc free?
不然就占着空间,即使我不malloc的指针也会占着空间不放?
是的, 指针本身占4个字节(忽视一切例外情况)

//不然就占着空间,即使我不malloc的指针也会占着空间不放?
是不是占着空间不放,得看你定义的指针的类型,这个和普通的变量是一样的,
全局的指针变量,占着4个字节不放,直到程序结束。
函数内部的指针变量,占着4个字节,函数结尾时自动释放,也就是自动变量。

free释放的是 malloc分配的内存,也就是指针指向的内存。

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2010-08-14 18:11
carmeloyin
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
帖 子:161
专家分:157
注 册:2008-12-2
收藏
得分:0 
LS的让我茅塞顿开一大部分
2010-08-14 18:30
快速回复:求助有关malloc的一个小问题!
数据加载中...
 
   



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

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