CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

new的问题

楼主65536(:)2003-12-03 22:49:09 在 C/C++ / C语言 提问

我想做一个动态分配内存的函数,用来构造树,但下面的代码不能正常运行,在Alloc分配后,回到主函数就自动释放了,问题出在哪里?  
   
  node   *root;  
   
  struct   node  
  {  
  int   value;  
  node   *left;  
  node   *right;  
  };  
   
  void   Alloc(node*   start,int   val)  
  {  
  start   =   new   node;  
  start->value   =   val;  
  }  
   
  void   main()  
  {  
  Alloc(root,11);  
   
  } 问题点数:50、回复次数:11Top

1 楼smalltalk(老徐)回复于 2003-12-03 23:15:57 得分 5

Alloc要传指针的指针才可以。改成:  
  void   Alloc(node**   start,int   val)  
  {  
  *start   =   new   node;  
  *start->value   =   val;  
  }  
   
  void   main()  
  {  
  Alloc(&root,11);  
   
  }  
  Top

2 楼Wolf0403(废人:独活十年~心如刀割)回复于 2003-12-03 23:33:46 得分 5

或者:  
   
  void   Alloc(node*&   start,int   val)  
  {  
  start   =   new   node;  
  start->value   =   val;  
  }Top

3 楼winco(老狼)回复于 2003-12-03 23:35:29 得分 5

楼上正确。当然也可以这样使用  
  void   Alloc(node*&   start,int   val)  
  {  
  start   =   new   node;  
  start->value   =   val;  
  }  
  Top

4 楼winco(老狼)回复于 2003-12-03 23:35:45 得分 5

被抢先了,呵呵Top

5 楼galaxy_fxstar(阿星)回复于 2003-12-03 23:39:46 得分 5

你为什么要用new??  
  new是在堆栈申请空间的,函数结束自然释放。  
  如果想让空间保留的话应该用malloc()函数代替new方法。Top

6 楼magic007(无名)回复于 2003-12-04 00:25:19 得分 5

楼上说的不对,new是从堆中申请空间的,函数结束并不会自动释放。  
  楼主的程序应改为  
  void   Alloc(node   *&start,int   val)  
  {  
  start   =   new   node;  
  start->value   =   val;  
  }  
  以楼主这样的写法,会有memory   leak问题。  
   
  Top

7 楼Sodier(逍遥神剑)回复于 2003-12-04 03:39:41 得分 5

要改变指针本身的值,就需要传双重指针。  
  将程序改为以下就可以了  
  node   *root;  
   
  struct   node  
  {  
  int   value;  
  node   *left;  
  node   *right;  
  };  
   
  void   Alloc(node**   start,int   val)  
  {  
  *start   =   new   node;  
  (*start)->value   =   val;  
  }  
   
  void   main()  
  {  
  Alloc(&root,11);  
   
  }  
  Top

8 楼yonyon(江南菜子)回复于 2003-12-04 10:20:13 得分 5

楼上几位高手已经解决  
  你应该把函数参数的值、址传递的基本概念透彻  
  这个问题,不单是传统意义的传址  
  传统意义的传址在这里相当传值  
   
  唉!说不清楚,不知道有没有帮助  
  再仔细看看几位老大的code吧Top

9 楼yonyon(江南菜子)回复于 2003-12-04 10:47:43 得分 5

靠!  
  我在说什么呀?  
  楼上Sodier(逍遥神剑)已经说的那么清楚了    
   
  要改变普通变量的值,要传址  
  要改变指针本身的值,就需要传指针的地址  
   
  楼主别介意,不是捣乱  
  刚刚被老板骂,还没清醒Top

10 楼zhouqingyuan(浪帆)回复于 2003-12-04 10:53:32 得分 0

upTop

11 楼jialiang123(月亮小子)回复于 2003-12-04 12:23:21 得分 5

node   *root;  
   
  struct   node  
  {  
  int   value;  
  node   *left;  
  node   *right;  
  };  
   
  void   Alloc(node**   start,int   val)  
  {  
  *start   =   new   node;  
  (*start)->value   =   val;  
  }  
   
  void   main()  
  {  
  Alloc(&root,11);  
   
  }  
   
  Top

相关问题

关键词

  • 函数
  • 指针
  • start
  • root
  • node
  • val
  • alloc
  • 值
  • 释放
  • 问题

得分解答快速导航

  • 帖主:65536
  • smalltalk
  • Wolf0403
  • winco
  • winco
  • galaxy_fxstar
  • magic007
  • Sodier
  • yonyon
  • yonyon
  • jialiang123

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo