c – 由于函数的大型返回类型而导致的Stackoverflow

c – 由于函数的大型返回类型而导致的Stackoverflow,第1张

概述我的代码: #include <iostream>#include <array>using namespace std;array< array<int, 1000>, 1000 > largeThing;array< array<int, 1000>, 1000 > functionFoo() { return largeThing;}void ma 我的代码:
#include <iostream>#include <array>using namespace std;array< array<int,1000>,1000 > largeThing;array< array<int,1000 > functionFoo() {            return largeThing;}voID main(){    functionFoo();    return;}

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

题:

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

编辑:

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

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

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

using bigarray = std::array< std::array<int,1000 >;std::unique_ptr< bigarray > functionFoo() {           return std::make_unique< bigarray >();}

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

std::vector< std::vector<int> > functionFoo() {            std::vector< std::vector<int> > largeThing( 1000,std::vector<int>( 1000 ) );    return largeThing;}
@H_404_14@ @H_404_14@ 总结

以上是内存溢出为你收集整理的c – 由于函数的大型返回类型而导致的Stackoverflow全部内容,希望文章能够帮你解决c – 由于函数的大型返回类型而导致的Stackoverflow所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241281.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存