3.3章のサンプルプログラムをC++で書こうとしたところ、添付したコードができましたが、
Ctrl+f5を押しても真っ黒な画面が出てきてすぐ消える、という挙動になってしまいました。
コンパイル時にエラーが出ないのでどう解決すればいいかがよくわからないのですが、
何が問題でこのような挙動になってしまっているのでしょうか?
また、今後このような問題が起きた時の解決するための方針も合わせて教えていただけると大変助かります。
よろしくお願いします。
新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました
Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました
ファイルサイズが大きすぎるのか、添付に失敗したようなので、以下にうpしておきます。
重ね重ねよろしくお願いします。
http://www.dotup.org/uploda/www.dotup.o ... 8.zip.html
重ね重ねよろしくお願いします。
http://www.dotup.org/uploda/www.dotup.o ... 8.zip.html
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました
まず、.sdfファイルやDebugフォルダは不要な上に重いので削除してアップしましょう。
menu_elementのchar* m_nameの領域を確保せずにコピーしようとして落ちてるのではないですか?
確認はしていませんが、ブレイクポイントで一行ずつ見て行けばどこで落ちているか分かりますよ。
menu_elementのchar* m_nameの領域を確保せずにコピーしようとして落ちてるのではないですか?
確認はしていませんが、ブレイクポイントで一行ずつ見て行けばどこで落ちているか分かりますよ。
Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました
>まず、.sdfファイルやDebugフォルダは不要な上に重いので削除してアップしましょう。
了解しました。
>menu_elementのchar* m_nameの領域を確保せずにコピーしようとして落ちてるのではないですか?
>確認はしていませんが、ブレイクポイントで一行ずつ見て行けばどこで落ちているか分かりますよ。
はい、m_nameの領域をmenu_elementのコンストラクタで確保したところ、どうやら問題は解決したようです。ありがとうございました。
ただ、Ctrl+f5で起動するとまた別の問題が起きたのか、エラーメッセージが出てプログラムが落ちてしまいます。
ブレイクポイントを使ってみた結果、
int white=GetColor(255,255,255);
と書いた時に、なぜかwhiteに-1が代入されているようだと分かりました。
GetColorのリファレンスも見てみたのですが、いまいちこの問題(whiteになぜか-1が代入される)の原因と解決策がわかりません。
どなたか今一度コードを確認していただけないでしょうか。
以下に上げ直しました。
http://www.dotup.org/uploda/www.dotup.o ... 1.zip.html
了解しました。
>menu_elementのchar* m_nameの領域を確保せずにコピーしようとして落ちてるのではないですか?
>確認はしていませんが、ブレイクポイントで一行ずつ見て行けばどこで落ちているか分かりますよ。
はい、m_nameの領域をmenu_elementのコンストラクタで確保したところ、どうやら問題は解決したようです。ありがとうございました。
ただ、Ctrl+f5で起動するとまた別の問題が起きたのか、エラーメッセージが出てプログラムが落ちてしまいます。
ブレイクポイントを使ってみた結果、
int white=GetColor(255,255,255);
と書いた時に、なぜかwhiteに-1が代入されているようだと分かりました。
GetColorのリファレンスも見てみたのですが、いまいちこの問題(whiteになぜか-1が代入される)の原因と解決策がわかりません。
どなたか今一度コードを確認していただけないでしょうか。
以下に上げ直しました。
http://www.dotup.org/uploda/www.dotup.o ... 1.zip.html
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました
-1で支障がありますか? 環境で戻り値が変わるので-1 で多分大丈夫だと思うんですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました
>-1で支障がありますか? 環境で戻り値が変わるので-1 で多分大丈夫だと思うんですが。
そうだったのですか。-1で大丈夫なら安心なのですが、それだと自分には
なぜこのソリューションをCtrl+f5でビルド(?)した時に強制終了するのかさっぱりわからなくなります。
ブレークポイントを配置してf5でデバッグしてみたんですが、今度は何も問題なさげに予定された通りの動きをしていました。
何が問題でCtrl+f5した際に強制終了してしまうのか、教えていただけませんか。
もう正直自分の手には負えなくなっています。
そうだったのですか。-1で大丈夫なら安心なのですが、それだと自分には
なぜこのソリューションをCtrl+f5でビルド(?)した時に強制終了するのかさっぱりわからなくなります。
ブレークポイントを配置してf5でデバッグしてみたんですが、今度は何も問題なさげに予定された通りの動きをしていました。
何が問題でCtrl+f5した際に強制終了してしまうのか、教えていただけませんか。
もう正直自分の手には負えなくなっています。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました
m_name=new char;だとstrcpyする領域としては必要なサイズとか考慮されていないので大問題ですね。ポインタの勉強をされたほうが良いと思います。
動いていたのはたまたまだと思います。
C++なのでstd::stringクラスを使ったほうが良いんですが、ポインタも勉強しておくべきだと思います。
動いていたのはたまたまだと思います。
C++なのでstd::stringクラスを使ったほうが良いんですが、ポインタも勉強しておくべきだと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました
返信ありがとうございます。一度ポインタの勉強をし直してからチャレンジし直したいと思います。
はじめはstringを使っていたのですが、DrawFormatStringにstring型で文字列を渡せないという問題が起こったので途中で
char*型に書き直しました。
DrawFormatstringにstring型の文字列を引数として渡す方法があるのでしょうか?
それともDrawFormatStringにstring型の文字列を渡す場合はchar*型にキャストしなければいけないのでしょうか?
自分の技術レベルが根本的に足りてないということなので、これでこのトピックは一度解決扱いにしようと思います。
しかし上記に答えられる方は是非お願いします。
はじめはstringを使っていたのですが、DrawFormatStringにstring型で文字列を渡せないという問題が起こったので途中で
char*型に書き直しました。
DrawFormatstringにstring型の文字列を引数として渡す方法があるのでしょうか?
それともDrawFormatStringにstring型の文字列を渡す場合はchar*型にキャストしなければいけないのでしょうか?
自分の技術レベルが根本的に足りてないということなので、これでこのトピックは一度解決扱いにしようと思います。
しかし上記に答えられる方は是非お願いします。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました
c_str()メンバ関数でconst char* constポインタは得られます。
クラスのインスタンスをchar*型にキャストは出来ません。
クラスのインスタンスをchar*型にキャストは出来ません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました
返信ありがとうございます。c_str()については今知りました。やはりもう一度C++を学習し直さなければと思いました。
そうですよね、stringをchar*にキャストできたら変ですもんね、DrawFormatStringにstringを渡す方法がわからなくて混乱してました。
何度も回答してくださってありがとうございました。ではおやすみなさい。
そうですよね、stringをchar*にキャストできたら変ですもんね、DrawFormatStringにstringを渡す方法がわからなくて混乱してました。
何度も回答してくださってありがとうございました。ではおやすみなさい。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました
オーバーロードすれば(const char * const)は出来ると思いますが、 stringは対応定義していなかったはずだと思います(完全に自信がない・・・)。ねんどじん さんが書きました:返信ありがとうございます。c_str()については今知りました。やはりもう一度C++を学習し直さなければと思いました。
そうですよね、stringをchar*にキャストできたら変ですもんね、DrawFormatStringにstringを渡す方法がわからなくて混乱してました。
何度も回答してくださってありがとうございました。ではおやすみなさい。
自分で継承して作るのも方法です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。