new的问题
我想做一个动态分配内存的函数,用来构造树,但下面的代码不能正常运行,在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




