| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 605 人关注过本帖
标题:C空间释放
只看楼主 加入收藏
shaoyuan
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2008-9-7
结帖率:100%
收藏
 问题点数:0 回复次数:3 
C空间释放
#include<stdio.h>
struct sy{
    int a[10];
};
int main(){
    struct sy * ptr=malloc(sizeof(struct sy));
    ptr->a[0]='a';
    ptr->a[1]='b';
    ptr->a[2]='c';
    printf("%c\n",ptr->a[0]);
    printf("%c\n",ptr->a[1]);
    printf("%c\n",ptr->a[2]);
    free(ptr);
    printf("%c\n",ptr->a[0]);
    printf("%c\n",ptr->a[1]);
    printf("%c\n",ptr->a[2]);
    return 0;
}
改程序中free(ptr);释放的只是struct sy结构中a[0]的空间,请问如何释放整个整形数组的空间呢?
搜索更多相关主题的帖子: 空间 释放 
2008-09-07 10:43
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
你已经释放了整个结构体的空间了,还能访问是因为内存仍然保存了它的值,但是这些值是不确定的,而且是不属于你的空间。这样做叫做“悬挂指针访问”,或者通俗的说:野指针,这样做是不安全的。

你可以在VC里面用Debug编译这个程序,VC为了便于Debug,在不同类型的堆数据里面写了不同的值(比如释放前是一个值,释放后是一个值等等),这样你就可以看出来其实已经释放了,但是记住,不要访问野指针,要有良好习惯:
free(ptr);
ptr=NULL;

切记切记……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-09-07 10:52
GaFu
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2008-9-4
收藏
得分:0 
struct sy * ptr=malloc(sizeof(struct sy));
struct sy * ptr=malloc(sizeof(struct sy));

这个语句定义结构体指针,同时给指针*p赋了个int型初值?
这样理解对不??????
2008-09-07 22:43
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
int型初值?No,那是指针……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-09-08 02:27
快速回复:C空间释放
数据加载中...
 
   



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

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