![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
初心者です。よろしくお願いします。
C言語とDXライブラリを利用してゲームを作成中です。
GetMousePointの関数を利用して、マウスの座標がその時、どこにあったのか。という情報を配列に格納したい、と考えています。
リファレンスページを参照すると、
int GetMousePoint( int *XBuf, int *YBuf );
このように書かれているのですが、配列に格納しようとするとフリーズしてしまいます。
【1】
GetMousePoint(&x,&y);
zahyou[i] = x;
最初上のようにしてフリーズしたため、ああ、アドレスを格納してしまったのか。と思いまして、
下のように直しました。
【2】
GetMousePoint(&x,&y);
int *a = &x;
zahyou[i] = *a;
が、またフリーズが発生しました。ポインタを説明しているページを見てはいるのですが、ポインタの指すアドレスの中にある数値の取り出し方がイマイチ掴めません。
なぜか別の場所で処理している、
【3】
(x = x-230)/=40;
x = x*40+250;
このような処理に関しては動くのですが・・・。これはアドレスを直接に利用している、ポインタの中身を利用しているのではない、ような気がするのですが、なぜか動いています。
(上の処理より下の箇所で利用しています)
【1】【2】【3】のそれぞれがどう言った処理を行っていて、こうすれば良い。等のアドバイスをいただけないでしょうか。
あつかましいとは思いますが、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
static int x,y なら
GetMousePoint(&x,&y);
zahyoux[i] = x;
zahyouy[i] = y;
でいいはずですが。
// static である必要はあるのか? とか
// zahyou[i] の宣言は? zahyoux[i] の間違い ? とか
// struct point {int x;int y} zahyou[20] とかの方がいいのでは? とか
ここでフリーズしているわけでは無いと思います。
これが原因だとしても、実際にフリーズするのは別の場所では?
例えば、このzahyouを使って何かを表示している箇所とか。
> GetMousePoint(&x,&y);
> int *a = &x;
> zahyou[i] = *a;
これは
GetMousePoint(&x,&y);
zahyou[i] = x;
とまったく同じです。
int *a = &x; で aはxへのアドレスとなり
zahyou[i] = *a; で、 *a→(xへのアドレス)の実体→ xの実体
となるからです。
> (x = x-230)/=40;
> x = x*40+250;
ポインタはまったく関係ありません。
ただの数値演算です
ところで
(x = x-230)/=40;
は意図してこうしたのですか?
C++では間違いでは無いのですが...
この回答への補足
ううん。【1】でよかったとは思いませんでした。別の箇所なんですかね。Staticである必要はあります。補足で書いてあるプログラムは一部で、別の関数でもそれらを使用する予定、あるいはしている状態だからです。
>これは
>GetMousePoint(&x,&y);
>zahyou[i] = x;
>とまったく同じです。
structは構造体の宣言でしたね。そういえばそんなものもありました。頭から抜け落ちてました。
【1】と【2】が同じとは、有難い助言です。
正直、何が何やら、で頭が沸騰していましたので。
>(x = x-230)/=40;
>は意図してこうしたのですか?
>C++では間違いでは無いのですが...
意図して書いてはいるんですが、改めてみると何かおかしいですね? C言語のみ利用しているつもりですので、直した方がいいんでしょうか。
問題なのは、
>ここでフリーズしているわけでは無いと思います。
>これが原因だとしても、実際にフリーズするのは別の場所では?
>例えば、このzahyouを使って何かを表示している箇所とか。
ここでしか、このコードが書かれていない事なんです。
ちなみに実験的に動くかどうか、を試しで入れてみたので、別の場所で全く利用していません。
何かアホなミスをしているんでしょうか・・・。
前回は == を入れる所を = にしてしまっていて、半日悩みましたorz
配列の[i]部分で問題が生じているようでした。
zahyoux[i]の[i]部分に数字を入れればきちんと動作するのですが、そこに変数を入れるとフリーズしてしまうみたいです。
iには初期値0が与えられているのですが。
とりあえず、もう少し弄くってみたいと思います。
丁寧にありがとうございました。
No.3
- 回答日時:
群盲象をなでる状態になりそうな気がするので, 可能ならそのような問題を生じる短いプログラムを出した方がいいんじゃないでしょうか.
No.1
- 回答日時:
x,y,zahyouの型はなんですか?
>zahyou[i] = x;
iの値は問題ありませんか?
この回答への補足
それぞれ、
static int x,y;
static int zahyou[20];
static int i=0;
で宣言されています。
正確に書くならば、
static int x.y;
static int zahyoux[20],zahyouy[20];
static int i=0;
/*** ここから ***/
GetMousePoint(&x,&y);
int *a = &x;
int *b = &y;
zahyou[i] = *a; //ここと
zahyou[i] = *b; //ここ
i++;
if (i == 20)
i=0;
/*** ここまでの処理をマウスが離されたかどうか、を変数fと、GetMouseInput関数を利用して繰り返しています ***/
右側にコメントを入れてある配列の箇所を除けば、問題なく動くことは確認してあります。きちんと座標も得られているようです。
単純にポインタの知識が不足しているものだと思っているのですが、違うのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- C言語・C++・C# 変数のスコープ 5 2023/05/27 17:50
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# 10人分の生徒の英語の点数{32,34,41,38,40,26,14,46,42,50} と数学の点 2 2022/05/26 21:31
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
セグメントエラー
-
Run-Time Check Failure #3とい...
-
fopne で失敗する原因
-
戻り値で構造体を返すことは可...
-
ExcelVBAでのkernel32(64bit)
-
ハンドル、アドレス、ポインタ...
-
構造体とfscanf
-
DXライブラリ:ポインタと配列?
-
デバイスハンドルとは?
-
どうしてエラーになるかわかり...
-
Cで作成したDLL関数をVBから呼...
-
C言語の関数と配列に関する質問
-
▼C言語 ポインタ
-
ポインタの結合に関する質問です
-
お絵かきソフトにUNDO、REDOを...
-
IStream / VBA
-
コンストラクタでnewを失敗した...
-
NULLポインタが0でない処理系と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
init関数の意味
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
Run-Time Check Failure #3とい...
-
C言語の関数と配列に関する質問
-
LPSTR型の初期化について
-
戻り値で構造体を返すことは可...
-
参照型で受け取った引数をポイ...
-
構造体とfscanf
-
ExcelVBAでのkernel32(64bit)
-
アプリを32bitから64bit移行
-
Cで作成したDLL関数をVBから呼...
-
C言語でのconstを返す関数
-
main(int argc,char **argv[])...
-
DLL<->VB間での受け渡し(文字...
-
エラーの意味
-
PASCALとFARの意味
-
ハンドルはポインタか
-
CWnd::EnableWindow()の扱い方
おすすめ情報