TBitMapのエラーで気になる点があります

解決


yTake  2014-04-07 05:39:18  No: 46198

yTakeです。
度々お世話になります。

TBitMap.Createでエラーが生じるようになりました。

レイアウトの変更に伴い、コンポーネントの移動等をしましたがエラーの箇所は
変更していません。大きな変更は、IBコンポーネントを DataModuleにまとめた
くらいです。

エラーは、
プロジェクト  は例外クラス$C0000005(メッセージ'access violation at
0x00796619:read of address0x00000000')を送出しました。
でした。

エラー箇所のソースコードは、
procedure TDB_Show_Form.read_bkk();
var
Bmp : TBitMap;
begin
Bmp := TBitMap.Create(); // ①

です。(便宜上たの変数は省いています。構文チェックでもエラーはありません)
①でエラーとなります。

気になる点があります。
DELPHIの”コード”表示で行番号に表示されるブレークポイントを設定できるマー
ク(青丸点)が、実際のソースコードとずれている点です。

すべての箇所ではありません。あるところからずれてしまっています。
これによって、DELPHIの方でアドレス制御を誤っているとは考えられないでしょ
うか?

ソースコードは以前はエラーではありませんでしたし、レイアウト変更が原因と
なる事はあるでしょうか?
非常に不可解です。

よろしくお願いいたします。


yTake  2014-04-07 07:36:37  No: 46199

すみません

環境を記載忘れました。

32Bit Windows7 Ultimate 
4GB Memory
DELPHI XE3

です。

また、ブレークポイント関係では、設定したブレークポイントの赤丸点が実行すると、チェックが入る物とバツが入る物があります。
チェックの方は正常に一時停止になりますが、バツの方は飛ばされてしまいます。この様な違いはなぜ生じるのでしょうか?
構文チェックでエラーはありません。変数の初期化忘れなどであれば実行時エラーになると思いますが、、、

ご指導頂ければと思います。


igy  2014-04-07 09:33:36  No: 46200

関係ないかもしれませんが・・・

起動時のフォーム作成でエラー?
https://www.petitmonte.com/bbs/answers?question_id=8253
でも書きましたが、

・フォームの「自動作成の対象」の順番は、どのようになってますか?
・それぞれのフォームのOnCreateイベントで、(順番によって)まだ生成されていないフォームやモジュールを
  アクセスしているとかの可能性はありませんか?


yTake  2014-04-07 17:40:11  No: 46201

igyさん
ありがとうございます。
失礼致しました。

自分で投稿しておきながら気がつきませんでした。
TBitMapでのエラーと言う先入観もありました。
今回、フォームはいくつかあります。

「自動作成のの対象」の順番はどこで分かるのでしょうか?
プロジェクト名のコード表示に、
Application.Initialize;
Application.CreatForm(TForm1, Form1);
Application.CreatForm(TForm3, Form3);
等とあります。
この"CreateForm"の順を入れ替えてみました。
今回、フォームレイアウトの変更とIBコンポーネントをDataModuleにまとめると言う作業を主に行いました。
Application.CreateForm(TDataModule1, DataModule1);
が最後に付加されていましたので、最初に"CreateForm"される様に移動しました。(Application.Initializeより後)

しかしながら、改善しませんでした。

"Application.CreateForm"の順を入れ替えるだけではだめなのでしょうか?

変更前のソースなどと見比べて検討してみます。


yTake  2014-04-07 18:45:21  No: 46202

すみません。
今回の変更の前に戻って確認してみたのですが、既にこの時点でTBitMapのエラー(access violation)が出ている事に気がつきました。

以前は問題なかったのですが、いつの時点で発生し始めたのか、分からなくなってしまいました。

取り敢えず、少なくとも、ある時点までは現状の順で問題はなかったはずです。Formの自動生成は関係ない様に思います。

ブレークポイントの表示がおかしい様子なので、
ソースコードではなく、DELPHIの環境に問題があるのでしょうか?


igy  2014-04-07 18:59:39  No: 46203

問題を切り分けるために、新規のプロジェクトで、
関係がありそうな部分のみ(たとえばTBitMap関連の処理)を試してみるのは、いかがですか?


igy  2014-04-07 19:06:43  No: 46204

ちなみに、Delphi XE3は最新のアップデートは適用されてますか?


yTake  2014-04-07 19:50:10  No: 46205

igyさんありがとうございます。
XE3 は Update2 が適用済みです。今のところこれが最新と認識しています。(Embarcaderoのwebページで確認)

新規プロジェクトに問題の箇所等、追加・貼り付けながら確認してみます。


Quest  2014-04-07 20:52:48  No: 46206

ソースコードに付くマーク(青丸)がずれる場合
プロジェクトの再構築をすれば直ったと思います。


yTake  2014-04-07 22:09:45  No: 46207

igyさん
ありがとうございました。

分かってみると自分のミスでありお騒がせして申し訳なくなります。

やはり"access violation"と言うのは初期化していないオブジェクトへアクセスした場合がほとんどですね。

直接の原因は、問題のTBitMap変数ではなく、その次の手続きでの引数で用いていたTBitMap変数が初期化されていませんでした。
この手続きに入るところで、"access violation"となっていましたので、その前のTBitMap変数を疑ってしまいました。但し、こちらは正しく初期化していたのと、ブレークポイントの表示が何かおかしいのとで、次に出てくるTBitMapにまで中々目が行きませんでした。

今回、初めから追っかけて、気がつきました。

大変、ありがとうございました。

今後ともよろしくお願いします。


yTake  2014-04-07 22:26:39  No: 46208

Questさん、
ありがとうございます。
yTakeです。
すみません。よく見ないでリプライしてしまいました。

プロジェクトの再構築とありますが、プロジェクト・メニューのビルドの事でしょうか?

ビルドし直しは何度か試しましたが、解消されませんでした。

青丸の位置ズレの解消は半分諦めています。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加