関係の無い場所でアクセス違反

ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
返信する
メッセージ
作成者
Toshi
記事: 98
登録日時: 2005年7月19日(火) 19:47
お住まい: 山形県
連絡する:

関係の無い場所でアクセス違反

#1 投稿記事 by Toshi »

RAD を使用していて、メニューをクリックしたときのイベントの中に
別のファイルの Function を呼び出すコードを記述し、デバッグ実行させたら
全く関係の無い場所で「アクセス違反がありました」とエラーが出ました。

具体的には、
・別の(イベント)プロシージャの End Sub の部分
・Callback.wbp の [プロジェクト名]_DestroyObjects プロシージャの End Sub の部分
・InStr 関数の End Function の部分
これらの場所でアクセス違反があると表示されましたが、
これらを呼び出すようなコードはありませんでした。
アクセス違反の場所は、呼び出す Function の関数名によって違うかも知れません。

リリース コンパイルして実行させた場合は、 Function を呼び出す部分で
プログラムが終了しました。

環境は、
・AB 4.10
・XP Professional SP2
・Pentium M 1.4GHz
です。

記述したコードに原因があるにしても不可解なので、こちらのフォームへ投稿しました。
xsb007

#2 投稿記事 by xsb007 »

実は自分も似たようなの現象で悩んでいたのですが、下記のようにすればちゃんと動きました。ただ、リリースは正常なのでそちらではどうなるか分かりません。
  • 1.(必要であれば)新しい適当なアカウントを作成
    2.いったんログオフ
    3.別のアカウントにログイン
    4.ユーザー切り替えで元のアカウントに再ログイン
要するに、ユーザーIDを0以外にすれば動作します。
ちなみに自分の環境ではGDB(gccのデバッガ)もユーザーIDが0だと動作せず、0以外にすると正常に動作します。
Toshi
記事: 98
登録日時: 2005年7月19日(火) 19:47
お住まい: 山形県
連絡する:

#3 投稿記事 by Toshi »

仰られたとおり、
ログオフし、 Administrator でログオンし直して自分のユーザーへ切り替え、
ID が0で無い状態でデバッグしましたが、まだ同じ現象が出ます。
リリースも同じく、直ぐに終了してしまいました。

xsb007さんの様に解決した例もありますので、環境の問題の可能性もありますね。

ちなみに、Function を Sub に変更しても変わりません。
他のイベント プロシージャでも Sub を呼んでいる所はありますが...
現時点での回避策は、 Function/Sub を呼ばないということになるのでしょうか?
xsb007

#4 投稿記事 by xsb007 »

さっき、Toshiさんとまったく同様の現象が起こりました。
以前のプロジェクトを開いても問題は無く、それでふと気がついたのですが、自動変数(プロシージャ内部でdim宣言された変数)のサイズが大きすぎるとなるようです。巨大な配列などはグローバル変数にしてみてください。

ついでに山本さんへ:
Staticをサポートしてくれるとこういう場合など、グローバルにしなくてすむので助かります。
Toshi
記事: 98
登録日時: 2005年7月19日(火) 19:47
お住まい: 山形県
連絡する:

#5 投稿記事 by Toshi »

呼び出した Function の中で宣言されている 65,536 B の Byte 配列を
グローバル変数として宣言し直したら、正常に動作しました。
ありがとうございました。
ローカル変数のサイズが大き過ぎる場合に、正常に実行されなくなるのですね。
返信する