【问题标题】:Stack Overflow on FlashFlash 上的堆栈溢出
【发布时间】:2012-06-08 17:28:44
【问题描述】:

我的类中有一个返回数组的函数。问题是,使用时出现堆栈溢出错误。重要的功能是:

ScrollList/returnArmy

    public function returnArmy ( army:int ):Array
    {
        var returnVar:Array;

        if( army == 0 ) returnVar = army1_;
        else if( army == 1 ) returnVar = army2_;
        else if( army == 2 ) returnVar = army3_;
        else if( army == 3 ) returnVar = army4_;
        else if( army == 4 ) returnVar = army5_;
        else if( army == 5 ) returnVar = army6_;
        else if( army == 6 ) returnVar = army7_;
        else if( army == 7 ) returnVar = army8_;
        else returnVar = new Array;

        return returnVar;
    }

SkirmishScreen/returnArmy

    public function returnArmy ( army_:int ):Array
    {
        var retArmy:Array = returnArmy( army_ );
        return retArmy;
    }

SkirmishScreen/returnArmy 在循环中被调用,

    screensAR_[3] = new PlayScreen( stage, screensAR_[2].returnArmy( 0 ) );

使用 new Array() 初始化 Army1_ 到 8_。 有人可以帮忙吗?

编辑:准确的错误是:

错误:错误 #1023:发生堆栈溢出。 在 SkirmishScreen/returnArmy()

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    我不熟悉动作脚本,但看起来“SkirmishScreen”returnArmy 函数正在递归调用自身,并且从未中断过。这是其他语言中堆栈溢出异常的常见来源。

    您似乎并不是要使用递归。我猜你希望你的“SkirmishScreen”returnArmy 函数调用“ScrollList”returnArmy 函数,但是“SkirmishScreen”returnArmy 正在调用它自己。那就是递归。

    【讨论】:

    • 你是对的,这就是问题所在。 var retArmy:Array = returnArmy(army_);没有中断条件,如果函数返回现有数组或新数组,则仍会再次调用 returnArmy 方法。这将快速创建函数调用的堆栈溢出。
    • 我不相信 OP 应该为此使用递归函数调用,它可以只是一个循环。
    • SkrimishScreen/returnArmy 在错误指出时调用自己。
    • 它从来不应该是一个递归函数,它被认为是 ScrollList 的一个包装器,因为程序的结构是这样的。该死,这就是为什么你在睡眠不足时不编程!
    猜你喜欢
    • 1970-01-01
    • 2019-05-18
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2012-04-15
    • 2012-12-20
    相关资源
    最近更新 更多