Error: Error #1023: スタックオーバーフローが発生しました。

ActionScript3.0 — Tags: , , — chimanaco @ 4:59 PM このエントリをはてなブックマークに追加

OS10.5.6のFireFox3.0.1/Safari3.2.1で検証中、以下のエラーが出て処理が止まってしまった。

mac-error-090720

スタックオーバーフローとは何ぞ?と調べてみるとこれくさい。
StackOverflowError – ActionScript 3.0 言語およびコンポーネントリファレンス

ActionScript は、スクリプトで使用できるスタックを使い切った場合に StackOverflowError 例外をスローします。ActionScript はスタックを使用して、スクリプト内で行われた各メソッド呼び出しに関する情報 (例えば、メソッドが使用するローカル変数) を保管します。使用できるスタックスペースの量は、システムによって異なります。

StackOverflowError 例外は、無限反復が発生したことを示している可能性があります。その場合、関数に終了条件を追加する必要があります。また、再帰アルゴリズムには適切な終了条件があるものの、単にスタックを使い切ってしまったことを示している可能性もあります。この場合、代わりの方法として、アルゴリズムを反復的に表現するようにしてください。

スタックとはIT用語辞典によると、「最後に入力したデータが先に出力されるという特徴をもつ、データ構造の一種。」とのことなので、吐いたエラーはそんなに覚えらんねーよ、て事か。ローカル変数の使いすぎに注意、というのもどこかで見た。リファレンスの後半パラグラフは、最近やっと読み始めた「詳説 ActionScript 3.0」のP101にも書いてある内容。

今回エラーが出たコードはこんな感じのことをやっていました。

protected override function _onLoad():void {
	var sList:SerialList = new SerialList();	

	(略)

	for (var i:int = 0; i < 10; i++) {

		var sp:Sprite = new Sprite();
		(略)
		sp.x = i *10;

		sList.addCommand(
			new AddChild(ore, sp)
		);
	}

	// 実行したいコマンドを登録します。
	addCommand(
		(略)
		sList
	);
}

同じような処理を繰り返すことでスタックを使い切ってる?違う気もするが、同時に実行しても困らないものだったのでSerialListからParallelListに変更したところエラーは出なくなった。Progressionがどうこう言う前に(略)の箇所であれこれやってる部分が問題かも。要検証。

詳説 ActionScript 3.0
詳説 ActionScript 3.0
posted with amazlet at 09.09.19
Colin Moock
オライリージャパン
売り上げランキング: 17330
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
(c) 2010 chimanaco blog | powered by WordPress with Barecity