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

使用struct作为函数崩溃程序的返回值

如何解决《使用struct作为函数崩溃程序的返回值》经验,为你挑选了1个好方法。

我想使用struct作为fucntion的返回值,但它不起作用,我不知道为什么.运行此程序时程序崩溃.我得到了RTE.这段代码有什么问题:

#include 

using namespace std;
    struct Tablica{
        int T[201][201];
    };

    Tablica test(Tablica A, int m){
       if(m==1)return A;
       if(m%2 ==1){
            return test(A, m-1);
       }else{
           cout <<" #1 m " <

在此输入图像描述



1> Some program..:

让我们算一下:结构大小差不多是160kB(201*201*4(sizeof(int))),每次调用在堆栈上创建两个实例,一个用于参数A,一个用于变量B,意味着每个调用使用大约320kB的堆.你有三个电话,所以这是960kB.加上函数中的原始变量T,main使用的堆栈大小为1120kB,这超过了Windows上使用的1024kB默认进程堆栈大小.导致堆栈溢出和崩溃.

绝对最简单的解决方案?使函数的参数成为常量引用,即

Tablica test(const Tablica& A, int m)

这样做的问题是你在堆栈上的每个调用仍然至少有一次实例,即变量B,这样只需在堆栈用完之前再给你一些递归调用.

更复杂的解决方案是std::vector用于结构中的数据,该数据将数据放在堆上并使结构的数量小一些.这与上面使用参数的解决方案一起使用是一个更长期的解决方案,并且在用完堆栈之前会允许你进行大量的递归调用.它不会永远持续下去,堆栈是一个有限的资源,迟早你仍然会耗尽.

不推荐的解决方案是增加进程的堆栈大小,这仅适用于上述最后一个解决方案达到限制的情况,但是在增加堆栈大小之前,您应该开始考虑其他更好的设计来解决您的问题.


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