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

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 関数ポインタ型メンバ変数

by 山本 » 2006年2月24日(金) 14:55

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

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

追記

by 真紅 » 2006年2月24日(金) 14:18

追加情報

PC起動

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

デバッグ実行

コンパイル&実行成功

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

デバッグ実行

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

何でしょうこれ?

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

by 真紅 » 2006年2月22日(水) 18:14

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のバグであるとは思いますが、もしかしたら自分が何かやっちゃいけないことをしてしまっているのかもしれないので、何か変な点があれば指摘をお願いします。

ページトップ