• ベストアンサー

VC++6.0へバージョンアップしたら5.0で作ったアプリがエラーになる

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

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.5

VC5のDebug,Releaseビルド、VC6のDebugビルドではOKなんですよね。  Debugビルドでは、Releaseビルドでは行わない初期化やエラーチェックルーチンの組込みなどを行ってくれます。  この機能のおかげでバグを拾ってもらっているのでしょう。  VC5から6へVerアップしたことで出るようになったということは、Cの基本機能などの潜在バグなどではないでしょう。  VC6は持ってないのでこれは推測なのですが、VC5ではANSI C++が固まっていなかったためにMicrosoft独自の仕様だった部分を、6になり準拠させたために発生したものかもしれません。可能性は薄いですが。  「ページ違反」というのは、メモリアクセス絡みで起こるものなので、自作のクラスライブラリなどを作成しているのなら、デストラクタ周りなどを調べてみてください。その際、各クラスオブジェクトのメモリマップなどを作成して、細かい点までチェックするようにしてください。

yasutaka
質問者

お礼

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

その他の回答 (5)

  • itohh
  • ベストアンサー率45% (210/459)
回答No.6

こんにちは。itohhといいます。 他のみなさんが回答を寄せているように、AfxMessageBox関数でどこまで動いているか確認されては如何ですか? 自作の関数内のスタートとエンドに入れていくとわかりやすいですよ。 ただ、これから作成するプログラムでは、エラー処理を関数ごとにコーディングすることをお奨めします。 エラー処理を入れておくと予期しないエラーの解析に短時間で対処できるようになります。 例。 try { // 行いたい処理 } catch(...) { // エラー処理(ここで、エラーログをファイルなどに出力すると良い) } 詳細はMSDNライブラリで確認してください。

yasutaka
質問者

お礼

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

  • zerosix
  • ベストアンサー率31% (47/149)
回答No.4

char szBuff[3]; というふうに宣言して、 sprintf(szBuff,"%s","abcde"); なんて感じで、別で宣言した領域を破壊してるかも。 この場合も、コンパイルエラーは出ません。

yasutaka
質問者

お礼

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

  • nakashi
  • ベストアンサー率51% (21/41)
回答No.3

変数の初期化ミス、リソースリークなどが考えられます。 デバッグツールを使えばかなり簡単に見つかります。 下記URL参照

参考URL:
http://www.xlsoft.com/jp/products/BC/bchecker.html
yasutaka
質問者

お礼

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

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.2

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

yasutaka
質問者

お礼

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

  • qrpff
  • ベストアンサー率0% (0/2)
回答No.1

MSのページです。関係あるかな~。

参考URL:
http://www.microsoft.com/JAPAN/support/kb/articles/J046/3/31.htm?LN=JA&SD=SO&FR=0
yasutaka
質問者

お礼

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

関連するQ&A

  • プロジェクトのVC6からVC9の移行時のエラー

    現在、VC6で作成したプロジェクトをVC9に移行しています。 そこで、Debug版でコンパイルするとリンク時に下記エラーがでます。 //下記が、エラー内容 1>LINK : fatal error LNK1104: ファイル 'mfc42d.lib' を開くことができません。 Release版でコンパイルすると発生しません。 他の質問で同じような内容がありましたが、その対策内容を実行しようとするも、よく解りませんでした。 //////////////下記が参考にした解決策等////////////////////////////////// 今試しにVC6で・MFCアプリ(DLL共有) ・SDIアプリ・そのほかはデフォルトという条件で作って、VC2005 Proに変換してみたところ、問題なくコンパイル/リンクまでできました。もしかしてプロジェクトの中(ソリューションのツリーの中)に明示的にmfc42d.libを登録しているということはありませんか?vcのプロジェクトは"プロジェクト名.vcproj"で、単なるテキストファイルなので、その中もよく見てください。 /////////////////////////////////////////////////// 他に解決策はありますか?

  • VC++.netでReleaceモードとDebugモードでアプリの動作が違う..

    お世話になります。 現在、MS VC++.net Standerd でアプリケーションを構築していますが、 Debugモード で正常に動作している(ように見える)のに、 イザ Releaseモード でビルドを行うと、コンパイルは問題なく通るのですが、 Debugの時とアプリの動作が違うことに気が付きました。正常に動作しません。 コンパイルオプションでも間違ったのかと、いろいろ確認はしているのですが、 うまく見つけることができません。 なにか、考えられる原因とかありますでしょうか?

  • VC2010のビルドエラーを全部出すには

    VC++でビルド時にエラーが大量に出るとエラー100個でコンパイルを打ち切ってしまいます。 これを行わせず全部出す方法はないでしょうか。 あるいは100個→500個など増やすのでも結構です。 レジストリ操作はかまいませんが、実行モジュールに対するパッチはなしの方向で。 よろしくお願いします。

  • リリースビルドの作成

    VisualC++ 2005 Express Editionを使って、C言語の簡単なプログラムを作りました。コンパイルの際に出てくるエラーや警告は一切ない(デバッグモード、リリースモード両方)のですが、このリリースビルドをVC++をインストールしていないPCで実行しようとすると、「指定されたプログラムは実行できません。」と出て実行できません。コンパイルに使ったPCでは実行できます。 リリースビルドを作成の際、ツールバーにある"Debug"を"Release"に切り替えて、ソリューションをビルドしました。プロジェクトはWin32コンソールにして、空のプロジェクトから始めました。 なぜ、バイナリが実行できないのでしょうか? そもそも、リリースビルドの作成法はこれでいいのでしょうか?

  • VC++でcl.exeの実行エラー

    VC++6.0でビルドを行うとwarningはありますが、エラーは出てない状態で「cl.exeの実行エラー」と表示されビルドできません。どのような原因が考えられますか? 心あたりのある方、是非教えてください。

  • VC++でboolがエラーになる

    Borland C++ Builderで開発したプログラムを、訳あってVC++(2003)に乗せ変えてビルドしようとしたのですが、boolを使っているところでコンパイルエラーになります。 正確には error C2061: 構文エラー : 識別子'bool' となります。 このエラーの解決法をご存知の方がいらっしゃいましたら、ご教示お願いいたします。

  • VC++のエラー

    windows xp VC++ 6.0 http://www.kumei.ne.jp/c_lang/intro/no_57.htm に書いてある通りに、タイプをwin32 Application で 設定して、 #include <windows.h> int WINAPI WinMain( HANDLE hInstance , HANDLE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL, (LPCSTR)"メッセージ・ボックスのテストです。", (LPCSTR)"猫でもわかるプログラミング", MB_OK); return 0; } をプロジェクトに追加し、ビルドすると、 ******************************** --------------------構成: aaadf - Win32 Debug-------------------- コンパイル中... fdfdfdf.cpp D:\VC\aaadf\fdfdfdf.cpp(7) : error C2731: 'WinMain' : 関数はオーバーロードできません。 D:\VC\aaadf\fdfdfdf.cpp(5) : 'WinMain' の宣言を確認してください。 cl.exe の実行エラー fdfdfdf.obj - エラー 1、警告 0 ********************************* とエラーになります。 何がいけないのかさっぱりわかりません。。

  • VC++のバージョンの違いによる影響について

    いつもお世話になります。 10年ほど昔に作成したプログラム(VC++6.0でビルド)を分解して、例えばライブラリとしてVC++2005とかの新しいバージョンで作り変えようとした時に、考えられる問題点などありますでしょうか? ビルド自体ができない可能性があったり、ビルドができても実行時になんらかの理由でエラーが起こったりするでしょうか。 また、MFCを使っている場合は、バージョンが違うとうまくうごかないものでしょうか? VC++自体もほとんど使ったことがなく、想像もできません。

  • VC++で

    VC++で #include <iostream> using namespace std; int main() { cout << "motona_\n"; cout << "画面出力\n"; } をビルドすると… 1>------ ビルド開始: プロジェクト: AA, 構成: Release Win32 ------ 1> AA.cpp 1>AA.cpp(18): error C2731: 'main' : 関数はオーバーロードできません。 1> AA.cpp(17) : 'main' の宣言を確認してください。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== と出てきてしまいます。 どこが間違ってるのでしょうか????C++を始めたばかりなんで全くわかりません

  • VC++6.0シンタックスエラーについて

    一度windowsのプログラムを半完成させていました。 その後大幅に修正するため、コードの一部を切り貼りしながら修正していたのですが、ビルドをしたとき、予想以上のエラーが発生し(50位) 原因もよくわかりませんでした。 たまたま、雑誌についていたサンプルコードをビルドしたのですが まったく同じエラーが発生するのです。 自分では、VC++が壊れたのかなと思っているのですが、 こんな現象ご存知ありませんか?