プロが教えるわが家の防犯対策術!

VC++を5.0から6.0にバージョンアップしたのですが。
これで5.0で作ったプロジェクトをビルドしなおしたら、
実行時にアプリケーションエラーになってしまいました。
不正な処理-->ページ違反ですというやつです。
コンパイル時はエラーは何も出ないし、さらにデバックビルド
だとちゃんと動き、リリースの時だけこの現象が起きてしまうので、
解析が困難で困っています。

こういった現象に何か心当たりがある方アドバイスをお願いいたします。

A 回答 (6件)

VC5のDebug,Releaseビルド、VC6のDebugビルドではOKなんですよね。



 Debugビルドでは、Releaseビルドでは行わない初期化やエラーチェックルーチンの組込みなどを行ってくれます。
 この機能のおかげでバグを拾ってもらっているのでしょう。

 VC5から6へVerアップしたことで出るようになったということは、Cの基本機能などの潜在バグなどではないでしょう。
 VC6は持ってないのでこれは推測なのですが、VC5ではANSI C++が固まっていなかったためにMicrosoft独自の仕様だった部分を、6になり準拠させたために発生したものかもしれません。可能性は薄いですが。

 「ページ違反」というのは、メモリアクセス絡みで起こるものなので、自作のクラスライブラリなどを作成しているのなら、デストラクタ周りなどを調べてみてください。その際、各クラスオブジェクトのメモリマップなどを作成して、細かい点までチェックするようにしてください。
    • good
    • 0
この回答へのお礼

VC6.0の方が5.0よりシビアな部分があるみたいですね。
もう少しがんばって調べてみます。

お礼日時:2001/05/15 19:01

こんにちは。

itohhといいます。

他のみなさんが回答を寄せているように、AfxMessageBox関数でどこまで動いているか確認されては如何ですか?
自作の関数内のスタートとエンドに入れていくとわかりやすいですよ。

ただ、これから作成するプログラムでは、エラー処理を関数ごとにコーディングすることをお奨めします。
エラー処理を入れておくと予期しないエラーの解析に短時間で対処できるようになります。
例。
try {

// 行いたい処理

}
catch(...) {

// エラー処理(ここで、エラーログをファイルなどに出力すると良い)

}

詳細はMSDNライブラリで確認してください。
    • good
    • 0
この回答へのお礼

うーん MessageBoxいれたりコメントアウトしたりやってみてはいるんですが、
強制終了になる場所が変わったり、エラーが出なくても出力データがが化けてたり、すごく不安定な動作をしています。
MessageBoxを入れただけで動作が変化する事もありました。
ストラクチャの配列をポインタを使って操作しているのでその辺が怪しいという気はするんですが・・・もう少しがんばってみます。

お礼日時:2001/05/15 12:42

char szBuff[3];


というふうに宣言して、
sprintf(szBuff,"%s","abcde");
なんて感じで、別で宣言した領域を破壊してるかも。

この場合も、コンパイルエラーは出ません。
    • good
    • 0
この回答へのお礼

これは良くやってしまうんです。
でも今回は探してみたんですが、そうじゃないみたいです。
(自信が無いけど・・・)
もう少しがんばってデバックしてみます。

お礼日時:2001/05/15 19:19

変数の初期化ミス、リソースリークなどが考えられます。



デバッグツールを使えばかなり簡単に見つかります。
下記URL参照

参考URL:http://www.xlsoft.com/jp/products/BC/bchecker.html
    • good
    • 0
この回答へのお礼

すいませんリソースリークとはどういった状態でしょうか?
知識不足でほんとに申し訳ないです。
デバックツールは持っていません。

お礼日時:2001/05/15 19:27

VC4からVC5にしたときにこういう現象にあったことがあります。

最初はコンパイラを疑ったのですが、結果的には自分のプログラムのバグでした。
怪しいところにメッセージダイアログを埋め込んでみたり、トレースをログファイルに出力するなどして、根気よくデバッグするしかないでしょう。
    • good
    • 0
この回答へのお礼

うーん MessageBoxいれたりコメントアウトしたりやってみてはいるんですが、
強制終了になる場所が変わったり、エラーが出なくても出力データがが化けてたり、すごく不安定な動作をしています。
トレースをログファイルに出力・・の意味(やり方)が分かりません。
どんな事をするのでしょう。(すいません素人で・・・)

お礼日時:2001/05/15 12:00

MSのページです。

関係あるかな~。

参考URL:http://www.microsoft.com/JAPAN/support/kb/articl …
    • good
    • 0
この回答へのお礼

6.0のほうが5.0よりシビアな部分があるみたいですね。
メモリの開放ってnewとかmaroc使わなくてもしないといけないのでしょうか?

お礼日時:2001/05/15 19:15

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