热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Stackoverflow由于函数的大型返回类型

如何解决《Stackoverflow由于函数的大型返回类型》经验,为你挑选了2个好方法。

我的代码:

#include 
#include 

using namespace std;

array, 1000 > largeThing;

array, 1000 > functionFoo() {        
    return largeThing;
}

void main(){
    functionFoo();
    return;
}

如果我运行这个我得到一个Stackoverflow错误.我到目前为止,其原因是functionFoo()的返回类型很大,因为返回值实际上是在堆上.

题:

如何使用具有大型返回类型的函数,以便函数将放在堆栈上的所有内存都放在堆上?

编辑:

我刚刚增加了stacksize,它运行正常.



1> zett42..:

std::array 在堆栈上分配,这取决于您的构建设置可能相对较小(典型大小为1 MiB).

如果你需要更大的东西,你可以在堆上显式分配该数组并返回一个指针.在std::unique_ptr本例中为一个智能指针当指针超出范围是负责释放的,所以我们不必记住调用delete.

using bigarray = std::array, 1000 >;

std::unique_ptr functionFoo() {        
   return std::make_unique();
}

另一种方法是使用已经在堆上管理内存的不同类,例如std::vector:

std::vector > functionFoo() {        
    std::vector > largeThing( 1000, std::vector( 1000 ) );
    return largeThing;
}



2> MSalters..:

到目前为止,最简单的解决方案是使用vector而不是array.这将使用std::allocatoraka"堆".


推荐阅读
author-avatar
idc01
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有