首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

链表能否被返回?解决办法

2012-02-24 
链表能否被返回?比如在一个函数中声明了一个链表 最后返回它C/C++ codeList &FuncA(){List a//...//假如

链表能否被返回?
比如在一个函数中声明了一个链表 最后返回它

C/C++ code
List &FuncA(){    List a;    //...    //假如现在a有5个Node:first->1->2->3->4    return a;}void FuncB(List &){    //...}


那么在调用FunB(FuncA())的时候a链表是否还完整?

[解决办法]
应该不是了的吧,应该已经弹出栈了
[解决办法]
List FuncA()
[解决办法]
探讨
比如在一个函数中声明了一个链表 最后返回它


C/C++ code

List &FuncA()
{
List a;
//...
//假如现在a有5个Node:first->1->2->3->4
return a;
}

void FuncB(List &)
{
//...
}



那么在调用Fun……

[解决办法]
没见过能返回链表的 连返回数组都不行好像
 不过你可以尝试返回头指针............. 
如果返回头指针 就可以调用这个链表了.... 不过前提是你的a要是全局的.....
[解决办法]
完整 除非你用free把链表释放掉或者程序结束
[解决办法]
链表返回...
链表是啥子呢?
[解决办法]
可以,为链表写复制构造函数(深拷贝)即可。
[解决办法]
汗。 LZ返回的是引用!
如果list是一个头指针的话,那因为在FuncA里声明了一个局部的头指针,然后最后返回它的引用,这时候虽然你加入的一些元素还留在内存里,但是你在函数里声明的头指针却已经被弹出去了。
所以会造成内存泄漏。。。并且你在函数里添加的元素都无法找回了。



解决办法是像2楼那样直接返回,如果你想不同的List使用不同的空间就可以考虑加上深拷贝,否则直接让List使用同样的头指针就可以了
[解决办法]
list里的内容(包括头结点)全部用new动态分配,你那个引用久可以正确返回了

当然你返回的引用 只是一个头结点! 要完整复制链表,可以进一步从返回的引用得到的信息进行处理

如果该返回的链表没作用的时候,记得释放.

注意:
在函数返回指针(或数组)和引用的时候要注意 该指针指向对象是否只是一个“临时的”,即离开函数体生命周期会不会结束,如果不想它马上结束,可以用new进行分配,以后再进行delete释放

List &FuncA()
{
List a=new List;//////////////注意这里也用new,而不单是下面的结点用new!
//...
//假如现在a有5个Node:first->1->2->3->4
return a;//这里可以正确返回引用
}

[解决办法]
是可以返回的
不过要做一个拷贝构造函数
不过这种情况最好通过指针操作

热点排行