以下運行錯誤:AS3怪異的堆棧溢出occurence
Output is too long but this is the main idea:
" > outer-scope error "
" > [File_fla::MainTimeline~[O] Object[A] Object[A] *[A] *[A]] {}()"
previous line repeated for every abc bytecode: pushscope, subtract, multiply and convert_d etc.
" > VerifyError: Error #1023: Stack overflow occurred."
此代碼:
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的用於輕微代碼變體和調試模式SWF(由Daniel評價精確定位)
http://imageshack.us/a/img853/4057/stackoverflowdecompile.jpg 的反編譯
如果問題的來源正確定位,問題將變爲爲什麼連續'dup'調用中的函數進入導致堆棧溢出的無限循環?
腳本,因爲它似乎沒有什麼不尋常的,所以它可能是由您執行它的方式造成的。你能添加一些關於這個或更多代碼的更多信息嗎? – inhan
很好找,看起來像只要你在'dy * = dy'之前放置任何東西就行了''它可以工作。另外'dy * = 1 * dy'的作品,所以在我看來,輸入是原因。我注意到另一件事,當你在調試模式下運行它時,它不會跳起來,所以總而言之,我會說你的猜測是正確的 – Daniel
@Daniel出於好奇 - 不是我與你有任何分歧 - 怎麼做你提出這個想法?上述片段是否會向您輸出運行時錯誤? – inhan