以下运行时错误:
输出太长,但这是主要思想:
“ > 范围外错误”
" > [File_fla::MainTimeline~[O] Object[A] Object[A] *[A] *[A]] {} ()"
对每个 abc 字节码重复上一行:pushscope、减法、乘法和 convert_d 等。
“ > VerifyError:错误 #1023:发生堆栈溢出。”
对于此代码:
import flash.geom.Point;
function d(p1:Object, p2:Object):Number
{
var dx:Number = p2.x - p1.x;
var dy:Number = p2.y - p1.y;
// problem here as adding this line solves it -> (dx *= 1;)
dy *= dy;
dy += dx;
return dy;
}
var pt1:Point = new Point(0, 0);
var pt2:Point = new Point(1, 0);
d(pt1, pt2);
我对解决错误不感兴趣,
但知道它为什么会发生:来自知识渊博的用户的解释。
推测:我猜它可能与流水线中的数据危害有关(在它准备好之前使用 dy ),因为添加上面的注释行可以解决它。
编辑:这张图片显示了一个轻微的代码变体和一个调试模式 swf 的反编译(由 Daniel 在评论中指出)
http://imageshack.us/a/img853/4057/stackoverflowdecompile.jpg
如果问题的根源定位正确,问题就变成了为什么连续'dup'调用的函数进入无限循环导致堆栈溢出?