Release版とソリューションからの実行


hiky  2006-05-30 11:43:28  No: 62000  IP: 192.*.*.*

Visual studio 2003 を使ってます。
ソリューションからリリース版を実行すると正常終了するのですが、
アイコンをダブルクリックして実行した場合はエラーで強制終了させられます。理由の検討がつきません。なにかヒントをいただけないでしょうか?

編集 削除
Blue  2006-05-30 11:59:40  No: 62001  IP: 192.*.*.*

考えられる理由

・カレントディレクトリ関連で、実行時に必要なファイルが見つからない。
  (DLLや、入出力ファイル等のパス関連)
・起動時に引数が必要。


どこで強制終了するのか、メッセージボックスやログをとって確かめてみてはどうでしょうか?

編集 削除
PATIO  2006-05-30 15:03:29  No: 62002  IP: 192.*.*.*

補足しときますと、
ソリューションというよりもIDEから直接起動した時は特に設定を変えていないと
カレントディレクトリがソリューションワークスペースのフォルダになります。
IDEの説明ではプロジェクトファイルがある位置になるようになってますね。
Releaseを直接起動した時は当然Releaseのディレクトリがカレントです。
この辺はきちんと認識しておいた方がいいです。
起動時のカレントディレクトリを変更する事は簡単に出来ます。
プロジェクトのプロパティでデバッグの所を見てみれば多分わかると思います。

編集 削除
PATIO  2006-05-30 15:08:41  No: 62003  IP: 192.*.*.*

呼び出している関数やクラスのメンバー関数の返却値をきちんと受けて
エラーチェックしていますか?
チェックしてエラーメッセージを出すようにしていればある程度は
場所が絞れると思うのですけれど。
あと、デバッグだと大丈夫だとしてもそれはプログラムミスがない事には
なりません。リリースで動いていてもそれが即プログラムミスがないという
事にはならないです。潜在的に存在する不具合というのは0にするのは
非常に難しいです。動いたからOKというのは危険な発想なので注意した方がいいです。

編集 削除
hiky  2006-05-31 11:29:05  No: 62004  IP: 192.*.*.*

ご返答ありがとうございます。
・カレントディレクトリ関連で、実行時に必要なファイルが見つからない。
  (DLLや、入出力ファイル等のパス関連)
→ファイルが見つからない場合やファイルポインタが得られなかったとのエラーチェックはおこなっています。
・起動時に引数が必要。
→引数はいりません。

PATIOさん>
必要なファイルを選択するときは選択ダイアログを開いているのですがそれでも実行ファイルのディレクトリとかは意識すべきですか?

編集 削除
KING・王  2006-05-31 14:31:04  No: 62005  IP: 192.*.*.*

> アイコンをダブルクリックして実行した場合はエラーで強制終了させられます。
どのようなエラーかも示した方が回答が得られやすいと思います。

Blueさんがすでに指摘されていますが、MessageBox等を用いて、
どの部分まで実行されているか、確認してみてはどうでしょうか?

C言語でゆうところのmain()の先頭部分まで実行されているのか、
それ以前なのか等、1ステップずつMessageBox等で確認してみましょう。

編集 削除
hiky  2006-06-02 02:53:24  No: 62006  IP: 192.*.*.*

ある命令がメモリを参照してメモリが"written"または"read"になることができないというエラーです。
MessageBoxをいれて試すと”MessageBox”というコードを書いた関数をループしだしました。。。よくわかりません。メッセージボックスをいれるとその関数の頭にループするという現象がおこります。。。

編集 削除
スナナ  2006-06-02 09:41:18  No: 62007  IP: 192.*.*.*

この情報だけではなんとも言えないと思います。
Drワトソンのログを参照してみてください。

編集 削除
Blue  2006-06-02 09:50:49  No: 62008  IP: 192.*.*.*

どこか他のメモリを破壊しているとか?

でも、
> ソリューションからリリース版を実行すると正常終了するのですが
ていうことですからね。
本当に リリース版 を実行しています? デバッグ版ではないですよね?


まぁ、スナナさんと同様
問題のコードが一切かかれていないのでこちらとしてはこういう曖昧な回答しかつけれないわけで。

編集 削除
PATIO  2006-06-02 13:57:14  No: 62009  IP: 192.*.*.*

エラーメッセージからするととんでもないアドレスのメモリをアクセスしようと
して怒られているようですね。
.NET 2003を使われているようですけれど、そもそもプロジェクトの種類はいったい
何なんでしょう?
これって質問する上では大切な事ですよ。
とにかく、公開している情報が少なすぎて掲示板を見ている人は想像でレスを
書くしかないような状況である事を理解してください。

例えばですが、MFCを使ったアプリケーションであるならWinAppの派生クラスのInitInstanceの中にたくさんMessageBoxを入れて動作を追いかけるとか、
OutputDebugStringとデバッグ用のモニタソフト(DbgMon等々)を組み合わせて
追いかけるとかしてください。

MessageBoxを画面更新系の関数内で呼んでいませんか?
そんな事をするとMessageBoxが消えるたびに画面更新が走って
ループしますよ。

編集 削除