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

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aと関連する良く見られている質問

Qデバッグビルドとリリースビルドで計算結果が違う

こんにちは。
VC++.netで暗号化ソフトを作っているんですが、デバッグモードで実行した結果と、リリースモードで実行して得られる結果が違うので困っています。
原因としては、何が考えられるでしょうか?

warningで、「warning C4267: '=' : 'size_t' から 'int' に変換しました。データが失われているかもしれません。」と表示されましたが、(int)でキャストしてから警告は出なくはなっているんですが。

もう一つ、「LINK : warning LNK4089: 'SHELL32.dll' へのすべての参照は /OPT:REF によって廃棄されます。」と出ていますが、これは関係なさそうですので無視しています。

もしかして、同じような経験をされた方がいるんではないかと思い質問しました。
よろしくお願いします。

Aベストアンサー

値を初期化しないで使用した時に、この現象が発生する可能性が高いです。
例えば、関数のなかで、int a;と変数を動的変数として宣言し、このaを初期化せずに、
int b = a*a;
を実行した場合、デバッグモードの場合は、0になる可能性が高く、リリースモードの場合は、不定(前回のスタック領域で使用された値)になります。

Qリリースビルド時のエラー

Visual C++ 2005にて開発しています

リリースビルド時に以下のようなエラーがでます

ALINK: error AL1057: 実行可能ファイルをサテライト アセンブリにできません。カルチャは常に空でなければなりません。

どのように対処したらよいでしょうか?

Aベストアンサー

以下のページの下の方に「AL1057」の情報があります。
http://msdn2.microsoft.com/ja-jp/library/kchwc1f1(VS.80).aspx

Qリリースビルドで遅くなる

非常に大量のコードを書いた後で気づいたので
挙動からおそらくその辺だと「思われる」のですが

Windows XP SP 3で、Visual C++で
デバッグビルド・リリースビルドしたときの速度を比較してみると
おそらく、メモリマップドファイル絡みの個所で 
現状なぜかリリースビルドの方が遅くなります。


巨大なファイルを1度扱ってから再度ほぼ同じ個所を使用した時
デバッグビルドではその間にアプリケーションを1度終了したとしても、その後別に巨大なファイルを使ったりしなければ
どうもシステム的に(?)何らかのキャッシュが効いているようで
1回目で23秒程度かかる処理が、2回目以降は7秒弱で出来てしまいます。
(これは100回やったら99回以上はなるんでは?というくらい安定しています)
対してリリースビルドでは
最初の1回は同じくらいですが
2回目以降でも16秒程度はかかってしまう感じです。

なお、そのけた外れに長い演算の末に出来上がるfloatの配列は、デバッグビルド・リリースビルドで端から端まで完全に一致する、という確認もできています。


アプリ的に
2回目以降の時間を短縮できた方が非常に都合が良いのですが

ビルドの設定はほとんど同じですが、これは仕様でしょうか?


もしこれがキャッシュの方式の問題、であるのなら
Windows APIなどを使うことにより対処可能な問題でしょうか?


あるいは、デバッグビルド・リリースビルドの違いによるものではなく
このアプリケーションのデバッグビルドによって出来た実行ファイルの方に
以前関連付けを行ったりするように(アイコンや、独自ファイル形式ダブルクリックで開けるように)
レジストリを書き換えたのですが

これによってシステムから「なんらかの優先事項」を享受できるようになっているため
だったりする、という可能性もあるのでしょうか?

非常に大量のコードを書いた後で気づいたので
挙動からおそらくその辺だと「思われる」のですが

Windows XP SP 3で、Visual C++で
デバッグビルド・リリースビルドしたときの速度を比較してみると
おそらく、メモリマップドファイル絡みの個所で 
現状なぜかリリースビルドの方が遅くなります。


巨大なファイルを1度扱ってから再度ほぼ同じ個所を使用した時
デバッグビルドではその間にアプリケーションを1度終了したとしても、その後別に巨大なファイルを使ったりしなければ
どうもシステム的に(?)何らか...続きを読む

Aベストアンサー

VCのVerがわかりませんが、昔経験があります。
確かリンカのオプションでサイズ重視、速度重視とかの設定を変えると速くなりました。
ポインタをたくさん使う場合は速度重視の方が速かった気がします。


ほかにもマニフェストの組み込みとかいろいろ設定があるのでいじってみてください。

デフォルトだとコマンドラインからコンパイルした方がサイズが小さく高速です。

cl でコンパイルリンクします。

QVS2005 リリースビルドしたEXEが他のPCで開けない

VS2005 C++ ExpressでWindowsフォームアプリケーションをC++/CLIで作成しています。
(Standardを買う予定なのですが、まだ買いにいけていないのでExpressのままです)
OSはWinXP Pro-SP2です。

リリースビルドしたexeファイルを、当該PCでは実行可能なのですが、
exeを他のPCにコピーして実行すると、
「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります」
というダイアログが表示され、終了してしまいます。

検索してみたところ、いくつか対処法があったのですが、試した中では解決できませんでした。

◎ソリューションのプロパで、[構成プロパティ]-[C/C++]-[コード生成]で、ランタイムライブラリを「マルチスレッドDLL/MD」を「マルチスレッド/MT」に変更
   →ビルド時に「/MTと/clr:pureは同時に使用できません」エラー
   →/clr:pureを/clrのみにしても同じ。
   →「共通言語ランタイムサポートを使用しない」にすると、
     「マネージターゲットコードには/clrが必要」でビルドエラー
   →→→/MD /clr:pureに戻しました

◎exeと同じディレクトリにmanifestを作成
     ▽ファイル名はMicrosoft.VC80.CRT.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="Microsoft.VC80.CRT"
version="8.0.50727.762"
processorArchitecture="x86" >
</assemblyIdentity>
<file name="msvcr80.dll"/>
</assembly>

versionについては、VC++Expのバージョン情報で表示されるものに変更。
   →同じように、exe実行時にエラー発生、同じダイアログ
   →msvcr80.dllを同じディレクトリに置いても同じ

◎Platform SDKのDependency Walkerでexeをチェック
   →MSJAVA.DLLが見つからないという赤いメッセージが出る。
   →ファイル名をPC内で検索したが、見つからず。
     (VS2005ExpがインストールされたPCも、別のXPが入ったPCも)
   →試しに、vectorで拾った実行OKなDLL不要exeアプリをD-Walkerに
     かけてみたら、同じようにMSJAVA.DLLが見つからないという
     メッセージが表示された。 でも当然このexeはどのPCでも実行OK。

◎新しくプロジェクトを作成。 ボタンをひとつ配置し、
 イベント発生の関数のみ作成。 ただし中身はカラ。
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { }

   →デバッグビルドもリリースビルドも問題なし。 でもexeを
     別のPCにコピーすると同じダイアログが出てエラー終了

◎http://support.microsoft.com/kb/814496/jaに載っている方法:
  Visual Studio .NET プロジェクトで app.config ファイルの <xml> を
  UTF-8 に変更し、UTF-8 エンコードで app.config ファイルを保存します。

   →app.configファイルが検索しても見つからず


これは何が悪いのでしょうか?
ライブラリ・ランタイム関連であろうということはわかるのですが、
解決方法がわかりません。
よろしくお願いします。

VS2005 C++ ExpressでWindowsフォームアプリケーションをC++/CLIで作成しています。
(Standardを買う予定なのですが、まだ買いにいけていないのでExpressのままです)
OSはWinXP Pro-SP2です。

リリースビルドしたexeファイルを、当該PCでは実行可能なのですが、
exeを他のPCにコピーして実行すると、
「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります」
というダイアログが表示...続きを読む

Aベストアンサー

対象のPCですが.NET Framework Version 2.0
の実行環境ははいっているのでしょうか?
まず対象のPCに以下の2つのパッケージをインストールして試してください。

「Microsoft .NET Framework Version 2.0 再頒布可能パッケージ (x86)」
http://www.microsoft.com/downloads/details.aspx?familyid=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=ja

「Microsoft Visual C++ 2005 再頒布可能パッケージ (x86)」
http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&DisplayLang=ja


>UTF-8 に変更し、UTF-8 エンコードで app.config ファイルを保存します。
http://support.microsoft.com/kb/814496/ja
ですが対象のアプリケーションが
Microsoft Visual Studio .NET 2002
になっており今回は関係ないと思います。
(最終更新日も2003年6月19日ですので)

対象のPCですが.NET Framework Version 2.0
の実行環境ははいっているのでしょうか?
まず対象のPCに以下の2つのパッケージをインストールして試してください。

「Microsoft .NET Framework Version 2.0 再頒布可能パッケージ (x86)」
http://www.microsoft.com/downloads/details.aspx?familyid=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=ja

「Microsoft Visual C++ 2005 再頒布可能パッケージ (x86)」
http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-2...続きを読む

Qopen Tweenのプロジェクトのビルド方法

http://sourceforge.jp/projects/opentween/

このプロジェクトファイルをgitでダウンロードしてみました。


C#でプロジェクトが書かれているとのことで、現在 Microsoft Visual C# Express 2010をインストールしているので、

フォルダ内にあった”OpenTween.sln”というのをダブルクリックで起動してみたのですが、

このようなメッセージボックスが表示されました。

”Visal Stidio 2010 Shell”
"Invalid license data. Reinstall is required"



Microsoft Visual C# Express 2010をインストールしていればこのプロジェクトを起動することはできないのでしょうか?

ご存じの方いらっしゃいましたら、ご教授よろしくお願いいたします。

Aベストアンサー

Gitで同プロジェクトのソースをCloneしてVC# 2010 Expressで開いてみました。

自分の場合、ダブルクリックではうまく開けなかったのでVC# 2010 Expressを起動後「プロジェクトを開く」で開きましたところ2回「このバージョンのアプリケーションではサポートされないプロジェクトの種類です」という内容のメッセージボックスが表示され、その後ソリューションエクスプローラーに「(利用不可)」と表示されているプロジェクトが2つあるためその内容を確認するとVBとInstallShieldのプロジェクトでした。

まあこれだけなら読み込めないプロジェクト名がOpenTweenSetup(VB)とOpenTweenUp(InstallShield)なのでその2つを無視しても本体を作る分には問題なさそうですが、本体のプロジェクトのディレクトリにVBのソースファイルが含まれているため、C#だけではビルドできなさそうです。


人気Q&Aランキング

おすすめ情報