| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 731 人关注过本帖
标题:请教一个关于内存回收的问题
取消只看楼主 加入收藏
code_guy
Rank: 2
等 级:论坛游民
帖 子:28
专家分:33
注 册:2010-5-26
结帖率:0
收藏
已结贴  问题点数:10 回复次数:2 
请教一个关于内存回收的问题
////定义一个关于糖的结构 赋值并输出////
#include <iostream>
using namespace std;
struct sugers
{
    char *name;
    float weigth;
    int hot;
};
void main()
{
    sugers *snack=new sugers;  //开辟sugers空间
    snack->name =new char;    //开辟name空间
    strcpy(snack->name,"Mocha Munch");  //赋值
    snack->weigth=2.3;  //赋值
    snack->hot=350;  //赋值
    cout<<"sugers name: "<<snack->name<<endl;  //输出name
    cout<<"sugers weight: "<<snack->weigth<<endl;  //输出weight
    cout<<"sugers hot: "<<snack->hot<<endl;     //输出hot

}

上面的代码  请问下 开辟的堆空间最后是怎么被回收的??
是不是只有在当堆空间的指针指向另外一个数据的时候  才有我们自己手动显示的回收先前开辟的空间?
不好意思  要是用词不当 请指出来
搜索更多相关主题的帖子: 内存 
2010-10-15 12:33
code_guy
Rank: 2
等 级:论坛游民
帖 子:28
专家分:33
注 册:2010-5-26
收藏
得分:0 
以下是引用yangang2在2010-10-15 13:20:34的发言:

我给你举个例子int *p=new int;  其中p叫做栈中对象,new int叫作堆中对象,这是一个栈与堆的联合运用。若此语句在某个函数中定义,由于p是栈中对象,所以在超出定义p的函数内一定要delete p;手动释放内存资源,否则p的生命结束后,new int成为一个无法访问的区域,这就是内存泄露。主要有两种形式。指针变量超出生存期和指针另指向。
你用类来定义要好点,直接在析构函数中delete 指针对象释放资源。
你的意思是你的例子中当p指向另外的内存时  才需要手动delete p 来释放先前p指向的内存? 如果p不指向新的内存就不需要手动释放了  可以这样理解么?
2010-10-15 14:24
code_guy
Rank: 2
等 级:论坛游民
帖 子:28
专家分:33
注 册:2010-5-26
收藏
得分:0 
回复 7楼 yangang2
恩 你帮我看下上面的代码   当我手动加上delete 释放的时候 出现错误
去掉就没了

就是困惑在什么时候该手动释放 什么时候不用释放

明天给分 3q
2010-10-15 20:12
快速回复:请教一个关于内存回收的问题
数据加载中...
 
   



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

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