链表能否被返回?解决办法
链表能否被返回?比如在一个函数中声明了一个链表 最后返回它C/C++ codeList &FuncA(){List a//...//假如
链表能否被返回?
比如在一个函数中声明了一个链表 最后返回它
C/C++ codeList &FuncA(){ List a; //... //假如现在a有5个Node:first->1->2->3->4 return a;}void FuncB(List &){ //...}
那么在调用FunB(FuncA())的时候a链表是否还完整?
[解决办法]应该不是了的吧,应该已经弹出栈了
[解决办法]List FuncA()
[解决办法][解决办法] 没见过能返回链表的 连返回数组都不行好像
不过你可以尝试返回头指针.............
如果返回头指针 就可以调用这个链表了.... 不过前提是你的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;//这里可以正确返回引用
}
[解决办法]是可以返回的
不过要做一个拷贝构造函数
不过这种情况最好通过指针操作