Releaseでビルドした実行ファイルが停止します

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
きのこ派

Releaseでビルドした実行ファイルが停止します

#1

投稿記事 by きのこ派 » 14年前

こんにちは。
Visual C++ 2010 ExpressとDXライブラリを使ってゲームを作ったのですが、Releaseでビルドした実行ファイルが停止してしまい困ってます。
正しく言うと、作成した実行ファイルとそれに必要なファイルを作業していた場所から移動させると停止してしまいます。

作業していたファイルの構成は
typing
┣dat ←ゲームで使うデータのファイルが入ってます
┣Debug ←デバッグモードでビルドしたときのもの
┣img ←ゲームで使う画像が入ってます
┣include ←DXライブラリのライブラリファイル
┣ipch
┣typing ←cppファイル、ヘッダーファイルなど
┣Release ←リリースモードでビルドしたときのもの
┗sound ←ゲームで使う音楽が入ってます

となっております。
この作業ファイルにあるReleaseフォルダの中の実行ファイルを実行させると、きちんと動きます。

しかしここから、必要なものだけ別のフォルダに移動させ

abc(新しいフォルダ)
┣dat
┣img
┣Release
┗sound

として、Releaseフォルダ内の実行ファイルを実行させると、起動してすぐに「動作を停止しました」というウインドウが表示されます。
しかし、この実行ファイルをReleaseフォルダから出し、abcフォルダ内に移動させると、一応動き始めます。ただし当たり前ですが画像や音楽は表示・再生されませんし、dat内のデータを読み込んで変数に代入する辺りになれば「動作を停止しました」と出ます。

なぜ移動させてからRelease内の実行ファイルを動かそうとすると停止するのでしょうか?
プログラムのソース自体に問題があるのでしょうか?その可能性があるのでしたら、ソースも追記いたします。
回答よろしくお願いします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: Releaseでビルドした実行ファイルが停止します

#2

投稿記事 by h2so5 » 14年前

画像などのファイル名を絶対パスで指定していませんか?

きのこ派

Re: Releaseでビルドした実行ファイルが停止します

#3

投稿記事 by きのこ派 » 14年前

返信ありがとうございます。

ファイル名を絶対パスで指定してはいないです。
""../sound/○○.mp3"  "../img/○○.png" "../dat/○○.dat" のように、相対パスで指定しています。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: Releaseでビルドした実行ファイルが停止します

#4

投稿記事 by softya(ソフト屋) » 14年前

DXライブラリのLog.txtは出ていませんか?
それで大体の動作は分かるはずですので、Releaseで動かした場合とabc(新しいフォルダ)で動かした場合の両方を見せてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

きのこ派

Re: Releaseでビルドした実行ファイルが停止します

#5

投稿記事 by きのこ派 » 14年前

返信ありがとうございます。
リリースし直したところ、作業フォルダの方のReleaseフォルダ内の実行ファイルも動作を停止するようになってしまいました……。

一応、Log.txtを両方ともコピペしました。

作業フォルダの方でのLog.txt
4:システムの情報を出力します
13: DXライブラリ Ver3.04b
18: OS Windows7 ( Build 7600 )
124: CPU動作速度:大体2.39GHz
126: MMX命令を使用します
127: SSE命令が使用可能です
128: SSE2命令が使用可能です
129: CPUベンダ:GenuineIntel
134: CPU名:Intel(R) Core(TM)2 Duo CPU P8600 @ 2.40GHz
137:COMの初期化... 成功しました
152:メモリ総量:2001.88MB 空きメモリ領域:672.70MB
153:タイマーの精度を検査します
155:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60
156: パフォーマンスカウンターを使用します タイマー分解能 : 2337.929000 KHz
158: ソフトの二重起動検査... 二重起動はされていませんでした
168:ウインドウクラスを登録します... 登録に成功しました
170:ウインドウモード起動用のウインドウを作成します
187:ウインドウの作成に成功しました
320:IMEを無効にしました
323:ウインドウスタイルをウインドウモード用に変更します... 完了
330:DirectInput関係初期化処理
332: DirectInput7 の取得中... 成功
365: 引き続き初期化処理... 初期化成功
371: ジョイパッドの初期化...
395: ジョイパッドの初期化は正常に終了しました
397: マウスデバイスの初期化... 初期化成功
399: キーボードデバイスの初期化... 初期化成功
403:DirectInput 関連の初期化は正常に終了しました
403:DirectSound の初期化を行います
404:DirectSound インターフェースの取得を行います.... 成功
411:引き続きインターフェースの初期化処理... 成功
525: DirectSound デバイスを列挙します
528: モジュール名: ドライバ記述:プライマリ サウンド ドライバー
529: モジュール名:{0.0.0.00000000}.{a72ab4dd-aba0-43ea-8eb0-0df4d633d5c5} ドライバ記述:スピーカー (Realtek High Definition Audio)
530: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz
531: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB

532: 利用可能サンプリング精度
533: プライマリ 16bit = OK 8bit = OK
534: セカンダリ 16bit = OK 8bit = OK

534: 利用可能チャンネル
535: プライマリ MONO = OK STEREO = OK
536: セカンダリ MONO = OK STEREO = OK

538:DirectSound の初期化は正常に終了しました
542:DirectDraw オブジェクトの取得を行います.... 成功
550:引き続き初期化処理... 初期化に成功しました
581:IDirect3D9Ex オブジェクトを取得します.... 成功
586:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します
878:成功
881:Driver:igdumdx32.dll Description:Mobile Intel(R) 4 Series Express Chipset Family
883:画面のフォーマットは D3DFMT_X8R8G8B8 です
884:Zバッファのフォーマットは D3DFMT_D16 です
886:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
888:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
890:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です
892:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
893:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です
896:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
898:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です
900:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です
901:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です
903:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です
905:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です
907:描画用 16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
909:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
911:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
972:バックバッファロック転送の時間:11625nsec 一時的な描画可能バッファを使用した転送の時間:1796nsec
974:バックバッファロックを使用しません
976:Zバッファを作成します.... 成功
1028:プログラマブルシェーダーを使用します

1363:フォントの初期化を行います
1370:フォントの初期化は正常に終了しました
1373:文字コードバッファの初期化を行います... 完了しました


新しいフォルダでのLog.txt
2:システムの情報を出力します
6: DXライブラリ Ver3.04b
8: OS Windows7 ( Build 7600 )
111: CPU動作速度:大体2.38GHz
114: MMX命令を使用します
117: SSE命令が使用可能です
119: SSE2命令が使用可能です
122: CPUベンダ:GenuineIntel
135: CPU名:Intel(R) Core(TM)2 Duo CPU P8600 @ 2.40GHz
142:COMの初期化... 成功しました
171:メモリ総量:2001.88MB 空きメモリ領域:668.95MB
173:タイマーの精度を検査します
175:精度結果 更新回数 マルチメディアタイマー:1 パフォーマンスカウンター:60
177: パフォーマンスカウンターを使用します タイマー分解能 : 2337.929000 KHz
191: ソフトの二重起動検査... 二重起動はされていませんでした
199:ウインドウクラスを登録します... 登録に成功しました
205:ウインドウモード起動用のウインドウを作成します
229:ウインドウの作成に成功しました
352:IMEを無効にしました
353:ウインドウスタイルをウインドウモード用に変更します... 完了
356:DirectInput関係初期化処理
357: DirectInput7 の取得中... 成功
442: 引き続き初期化処理... 初期化成功
447: ジョイパッドの初期化...
470: ジョイパッドの初期化は正常に終了しました
471: マウスデバイスの初期化... 初期化成功
474: キーボードデバイスの初期化... 初期化成功
477:DirectInput 関連の初期化は正常に終了しました
478:DirectSound の初期化を行います
479:DirectSound インターフェースの取得を行います.... 成功
485:引き続きインターフェースの初期化処理... 成功
592: DirectSound デバイスを列挙します
595: モジュール名: ドライバ記述:プライマリ サウンド ドライバー
596: モジュール名:{0.0.0.00000000}.{a72ab4dd-aba0-43ea-8eb0-0df4d633d5c5} ドライバ記述:スピーカー (Realtek High Definition Audio)
597: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz
598: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB

599: 利用可能サンプリング精度
600: プライマリ 16bit = OK 8bit = OK
601: セカンダリ 16bit = OK 8bit = OK

602: 利用可能チャンネル
603: プライマリ MONO = OK STEREO = OK
604: セカンダリ MONO = OK STEREO = OK

605:DirectSound の初期化は正常に終了しました
611:DirectDraw オブジェクトの取得を行います.... 成功
619:引き続き初期化処理... 初期化に成功しました
650:IDirect3D9Ex オブジェクトを取得します.... 成功
656:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します
951:成功
952:Driver:igdumdx32.dll Description:Mobile Intel(R) 4 Series Express Chipset Family
953:画面のフォーマットは D3DFMT_X8R8G8B8 です
954:Zバッファのフォーマットは D3DFMT_D16 です
955:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
956:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
957:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です
958:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
959:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です
960:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
961:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です
962:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です
963:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です
964:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です
965:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です
966:描画用 16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
967:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
968:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
999:バックバッファロック転送の時間:4035nsec 一時的な描画可能バッファを使用した転送の時間:1050nsec
1001:バックバッファロックを使用しません
1002:Zバッファを作成します.... 成功
1021:プログラマブルシェーダーを使用します

1158:フォントの初期化を行います
1162:フォントの初期化は正常に終了しました
1163:文字コードバッファの初期化を行います... 完了しました


と、ほとんど同じなんですが……。

追記ですが、デバッグ・リリース共に、ビルドすると下の「出力」のウインドウの中に
typing.exe の 0x57fc2170 で初回の例外が発生しました: 0xC0000005: Access violation
という表記が必ずあるのを見つけました。
ただそれでもビルドに成功してしまうので、どこでアクセス違反しているのか見当がつきません……。
ただ、これが原因なのかとも思います。
引き続き回答よろしくお願いいたします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: Releaseでビルドした実行ファイルが停止します

#6

投稿記事 by softya(ソフト屋) » 14年前

追記ですが、デバッグ・リリース共に、ビルドすると下の「出力」のウインドウの中に
typing.exe の 0x57fc2170 で初回の例外が発生しました: 0xC0000005: Access violation
という表記が必ずあるのを見つけました。
ただそれでもビルドに成功してしまうので、どこでアクセス違反しているのか見当がつきません……。
ただ、これが原因なのかとも思います。
引き続き回答よろしくお願いいたします。
それは実行時のエラーです。
メモリのアクセス範囲外のエラーでポインタや配列の使い方に間違いがある場合に出ます。
デバッグビルドの場合は、そのエラーがウィンドウでも表示されるはずですが?
もしウィンドウが出ている場合は、中断を選んでもらうと問題のエラーが出た場所をVisualC++が表示してくれるはずです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

きのこ派

Re: Releaseでビルドした実行ファイルが停止します

#7

投稿記事 by きのこ派 » 14年前

返信ありがとうございます。
それは実行時のエラーです。
メモリのアクセス範囲外のエラーでポインタや配列の使い方に間違いがある場合に出ます。
デバッグビルドの場合は、そのエラーがウィンドウでも表示されるはずですが?
もしウィンドウが出ている場合は、中断を選んでもらうと問題のエラーが出た場所をVisualC++が表示してくれるはずです。
ウインドウが出ないんです……。
試しにわざと、配列にメモリ領域を割り当ててる部分等、わかりやすいところをコメントアウトしてみたら、その部分はきちんとウインドウが表示されました。

ブレークポイントを設定しながら少しずつデバッグしたところ
s1 = LoadSoundMem("../sound/14.mp3");
s2 = LoadSoundMem("../sound/42.mp3");
s3 = LoadSoundMem("../sound/01.mp3");
s4 = LoadSoundMem("../sound/47.mp3");
s5 = LoadSoundMem("../sound/06.mp3");
s6 = LoadSoundMem("../sound/12.mp3");
と、メモリに音楽を読み込む部分で出ることが判明しました。
ここをコメントアウトすると、例外メッセージは出ませんでした。
これのどこに問題があるのかわかりません……。何がいけないのでしょうか。
引き続き、回答よろしくお願いします。

きのこ派

Re: Releaseでビルドした実行ファイルが停止します

#8

投稿記事 by きのこ派 » 14年前

追記です。

上記のs1からs6に音を読み込む部分をコメントアウトしてリリースビルドしたところ、音は鳴りませんが動作を停止することなく動きました。
また、別のフォルダに移動してもきちんと動きました。
なので、ここに問題があると思われます。

ただやはりどこが悪いのか分かりません……。

http://dixq.net/rp/5.html
を参考に、GV.hというヘッダファイルでGLOBAL int s1, s2 … というように宣言をし、
set.cppというファイルでGV.hをインクルードし、上の書き込んだように、音楽ファイルをメモリに読み込んでいます。

ちなみに、画像も同様にGV.hで宣言、set.cppでメモリに読み込みというように扱っています。
こちらはきちんと動いています。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: Releaseでビルドした実行ファイルが停止します

#9

投稿記事 by h2so5 » 14年前

ウィンドウが出ない例外の場合、
MP3コーデックとDXライブラリの相性が悪くエラーが出ている可能性があります。

http://hpcgi2.nifty.com/natupaji/bbs/pa ... st&no=1628
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ast&no=871

きのこ派

解決しました!

#10

投稿記事 by きのこ派 » 14年前

すみません、解決しました!

音楽ファイルのプロパティを見てみたところ、

「このファイルは他のコンピューターから取得したものです。
このコンピューターを保護するため、このファイルへのアクセスはブロックされる可能性があります。」
というメッセージがあったので、その右にあった「ブロックの解除」というボタンをクリックしました。
そして再度リリースしたところ、作業フォルダでもコピー先でも、きちんと実行ファイルが動きました。
どうやらしっかりと「このファイルへのアクセスはブロックされる」にひっかかっていたようです……。
h2so5 さんが書きました:ウィンドウが出ない例外の場合、
MP3コーデックとDXライブラリの相性が悪くエラーが出ている可能性があります。

http://hpcgi2.nifty.com/natupaji/bbs/pa ... st&no=1628
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ast&no=871
ありがとうございます!
リリースがうまくいっても相変わらず例外は出るので、これが原因かもしれません。
mp3を一度oggに変換してみようと思います。

この返信で解決済とさせていただきます。
相談にのっていただいた皆様、本当にありがとうございました。

きのこ派

Re: Releaseでビルドした実行ファイルが停止します

#11

投稿記事 by きのこ派 » 14年前

前の書き込みで解決にチェックを入れ忘れました……。

dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

Re: Releaseでビルドした実行ファイルが停止します

#12

投稿記事 by dic » 14年前

ロックをはずすのは色々まずいんじゃぁ・・・
わかりませんけどね

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: Releaseでビルドした実行ファイルが停止します

#13

投稿記事 by softya(ソフト屋) » 14年前

dic さんが書きました:ロックをはずすのは色々まずいんじゃぁ・・・
わかりませんけどね
XP SP2でインターネットからダウンロードしたファイルが自動的に全てブロックされる様です。
すいませんdicさん、もう少し調べてから書いて頂けないでしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

きのこ派

Re: Releaseでビルドした実行ファイルが停止します

#14

投稿記事 by きのこ派 » 14年前

解決済みとしたのに再びの投稿すみません。
mp3をoggに変換しそれを読み込んだところ、例外メッセージも出なくなりました。
ありがとうございました。
softya(ソフト屋) さんが書きました:XP SP2でインターネットからダウンロードしたファイルが自動的に全てブロックされる様です。
自分も調べてみたところ、XP SP2以降でIE経由のものだとそうなることがあるみたいです。

閉鎖

“C言語何でも質問掲示板” へ戻る