関数ポインタ型メンバ変数

ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
返信する
メッセージ
作成者
真紅
記事: 12
登録日時: 2005年7月20日(水) 17:59
連絡する:

関数ポインタ型メンバ変数

#1 投稿記事 by 真紅 »

Ver4.21にて

↓をデバッグ実行(F2)しようとすると、コンパイラが不正な処理で落ちます。
ところが、デバッグコンパイル(F4)やリリースコンパイル(F7)では問題なくコンパイルが完了し、動作も問題ありませんでした。

コード: 全て選択

#console

Class HideMenuItem
Private

	ItemStr As BytePtr
	pfDraw As *Sub()
	pfMain As *Sub()
	pfSet As *Sub()

Public

	Sub ~HideMenuItem()
		free(ItemStr)
	End Sub

	Sub Set(str As BytePtr, pfMain As VoidPtr, pfSet As VoidPtr, pfDraw As VoidPtr)
		ItemStr = malloc(lstrlen(str) + 1)
		lstrcpy(ItemStr, str)

		This.pfMain = pfMain
		This.pfSet = pfSet
		This.pfDraw = pfDraw
	End Sub

	Sub CallMain()
		pfMain()
	End Sub

	Sub CallSet()
		pfSet()
	End Sub

	Sub CallDraw()
		pfDraw()
	End Sub
End Class

Dim a As Long
Dim ovc As HideMenuItem
ovc.Set("ああああああああああああああ", AddressOf(Func),AddressOf(Func),AddressOf(Func))

ovc.CallMain()
ovc.CallSet()
ovc.CallDraw()

Input a

Sub Func()
	Print "Func関数が呼び出されました"
End Sub
また、

・関数ポインタ型メンバ変数の数を減らす
・"あああああ..."の文字列を変更する
・mallocの行末にコメントを何文字か書く
・AddressOf演算子のところを0に置き換える

などとするとデバッグ実行が通るようになったりします。


デバッグコンパイル・リリースコンパイルが通るのでおそらくABのバグであるとは思いますが、もしかしたら自分が何かやっちゃいけないことをしてしまっているのかもしれないので、何か変な点があれば指摘をお願いします。
真紅
記事: 12
登録日時: 2005年7月20日(水) 17:59
連絡する:

追記

#2 投稿記事 by 真紅 »

追加情報

PC起動

ABエディタでこのソースを貼り付ける

デバッグ実行

コンパイル&実行成功

1文字消してから消した文字を書き直す

デバッグ実行

不正な処理でコンパイラが落ちる

何でしょうこれ?
山本
Site Admin
記事: 535
登録日時: 2005年5月30日(月) 15:08
連絡する:

#3 投稿記事 by 山本 »

バグのご報告ありがとうございます。こちらでも現象が確認でき、原因を突き止めることもできました。

次回のバージョンアップで修正しますので、今しばらくお待ちください。
返信する