プロが教える店舗&オフィスのセキュリティ対策術

C++でGUIプログラムを作成しています。

char FN[200];
FILE *fp;

ダイアログボックスで色々な値を入力

ファイル保存ダイアログでファイルを選択(FNに代入)

MessageBox(NULL,FN,"",NULL);
fp=fopen(FN,"w");
MessageBox(NULL,"","",NULL);
fclose(fp);
MessageBox(NULL,"","",NULL);
のようにすると、1回目のダイアログボックスにファイル名が出たあと、強制終了してしまいます。
値を入力するダイアログボックスに文字列を入力していると強制終了し、文字列でなく数字を入力、または空欄にしておくと強制終了しないようです。

変数がかぶっているかもしれないと思いfpとFNでGREPしましたが、怪しいと思われるところはありませんでした。

場所的にfopenでエラーになっていると思うのですが、原因は何でしょうか。

A 回答 (2件)

# BCC Developperは使ってないので操作は不明。


#  BCCならBorlandサイトからデバッガが入手できるので、
#  最低でもそれで対応は可能なはずです。

プロジェクト/makeの設定問題なども考えられますので、
設定内容や使っているDLL情報も必要かもしれません。
最小限の再現コードを作成して、提示してください。

可能性の問題だけですが。
・MessageBoxが悪さをしている。
  ・OutputDebugStringやTRACEなど、別の手段で確認する。
・FNがローカル変数などになっており、利用時には無効になっている。
   ・FNの定義位置(クラスのメンバの場合、クラスの用法も)や、
    ダイアログ入力部のソース等を提示してください。
・FNが正しく終端していない。
  ・MessageBoxの表示もおかしくなる可能性がありますが。
   ※MessageBoxの第四引数はUINTなのでNULLは不適かと。
・FNがオーバフローしている。
  ・パスは199byte以下ですか。
・バックグランドで並列処理があり、ぶつかっている。
・環境設定でCのライブラリが適合していない。
 ・マルチスレッドなのにシングルスレッド用を使ってるとか。
 ・例えばVC専用のサードパーティDLLを使っていたり、
  静的/動的リンクの混在など。
・CreateThread APIで作成したスレッド内に処理を書いている。Cの初期化が不完全。
 ・VCの例だと_beginthread等にしないとC標準関数の動作がおかしくなります。
    • good
    • 0
この回答へのお礼

> 最小限の再現コードを作成して、提示してください。

不必要な部分を削っている内に、
p=new List;
を見つけたので、
p=new List[20];
にすることで解決しました。

お騒がせして申し訳ありません。

お礼日時:2006/11/13 16:28

これだけの情報だと何が原因かわからないですね。


ステップデバッグしていって具体的にどこで落ちているかの情報をお願いします。

この回答への補足

すみません、ステップバックの方法が分からないです。
BCC Developerでもできるでしょうか。

今色々見てると、全角文字列2文字以上で強制終了、数字は3文字以上で強制終了するようです

補足日時:2006/11/10 17:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!