トップページ > 過去ログ > 記事閲覧
変数の数
名前:IHIW 日時: 2007/01/30 16:36

DXライブラリとは直接は関係ないのですが、C++に関しての質問です。 グローバル変数を、同時にたくさん宣言すると、そのアドレスが勝手に同じものになったりすることはあるのでしょうか。 現在、そうとしか考えられないような減少が起こっているので、どなたか解決方法を教えてください。

Page: 1 |

Re: 変数の数 ( No.1 )
名前:IHIW 日時:2007/01/30 16:40

すいません。「減少→現象」です。
Re: 変数の数 ( No.2 )
名前: 日時:2007/01/30 16:48

 それはない筈ですよ、もしあるとしたら、メモリ容量を上回る変数を宣言するくらいでしょうか(そのときは凍ると思いますが)。  似たような変数名をつけて、混同していませんか?  結構間違いの多いところなので、お心当たりあるならば確認してみてください。 追記:  変数の有効範囲というのがありますが、関数の中で宣言したものなど、グローバル変数でない変数の中に、グローバル変数と同じ名前の変数はありませんか? #include<stdio.h> int x=1;//グローバル変数 int test() { int x=2;//test()の変数 return x; } void main() { printf("x=%d\n",test()); } このとき、出力結果は「x=2」となります。
Re: 変数の数 ( No.3 )
名前:IHIW 日時:2007/01/30 19:08

返答ありがとうございます。しかし、メモリや変数名をすべて確認しても、問題はないようです。少々長くなりますが、問題のプログラムの一部を写そうと思います。 #include "stdio.h" #include "stdlib.h" #include "DxLib.h" #define SKILLNUMBER 1 #define MAPEVENTNUMBER 1 #define MAPXY 1 #define SKILLNUMBER 1 //今何の画面を表示させるか int screen1=0; int screen2=0; //今何のメニューを表示しているか int NowMenu=0; int NowMenu2=0; //画像ハンドル int start=0; int CursorGraph1=0; int WhiteGraph=0; int BlackGraph=0; int shadow=0; int MaWin=0; int SuWin=0; int ChaWin=0; int CooGau=0; int Line1=0; int Line2=0; int GrMe=0; int GradGraph=0; int BattleBack1=0; int BattleBack2=0; int BattleBack3=0; int MenuGraph=0; int TalkWindow_GH=0; //戦闘中の画像の表示許可 int BattleBack1Blend=0; int BattleBack2Blend=0; int BattleBack3Blend=0; int Line1Blend=0; int Line2Blend=0; int Line3Blend=0; int WhatBackTop=0; //音楽ハンドル int MapMusic=0; int BattleBGM=0; int TyakinSE=0; int PikonSE=0; int ZonSE=0; int WinBGM=0; //歩いたときに敵にあったかどうか int RandEncount=0; int RandEncount2=0; int RandEncountM=0; //カーソルの座標 int CursorX[3]; int CursorXX[2]; int CursorY[3]; int CursorYY[2]; //キーの使用禁止変数 int ConReject=0; //キーの変数 char KEY[256]; char KEYLOG[256]; //ループ用変数 int loop1=0; int loop2=0; int loop3=0; //味方と敵の戦闘に関するステータス(てかほぼ全部?) struct AAAAAAA{ char LvC[3]; int Lv; char LIFEC[4]; int LIFE; char MAXLIFEC[4]; int MAXLIFE; char ACTC[4]; int ACT; char MAXACTC[4]; int MAXACT; int Technical; char TechnicalC[4]; int TechnicalRev; int Attribute[11]; char AttributeC[11][2]; int Difence; char DifenceC[4]; int DifenceRev; int Resistance[11]; char ResistanceC[11][3]; int Speed; char SpeedC[4]; int SpeedRev; int Graph[40]; char GraphX[4]; char GraphY[4]; char GraphNum[4]; int Mode1; int Mode2; int GraChe; int X; char XC[4]; int Y; char YC[4]; char Name[40]; int Blender; char SkillsC[SKILLNUMBER][3][2]; int Skills[SKILLNUMBER][3]; int Type; char TypeC[4]; int Grad; int PreGrad; char GraphName[16]; int ChoiceSkill; int Target; char ItemC[4]; int Item; char ExpC[4]; int Exp; struct DDDDDDDD{ int Type; int UseGrad; int UseACT; int Attribute[11]; int Number; int Effect; }Skill; }Battlers[9]; //ファージとクリアのマップでの各変数 struct BBBBBB{ int X; int XLOG; int YLOG; int Y; int Graph[20]; int Mode; int Exsit; int Item[10]; }Chara[2]; int doria=0; //イベント int MapEventX[MAPEVENTNUMBER]; int MapEventY[MAPEVENTNUMBER]; int MapEventProce[MAPEVENTNUMBER]; int MapEventVar[MAPEVENTNUMBER]; bool MapEventNor[MAPEVENTNUMBER]; int MapEventNum[MAPEVENTNUMBER]; int MapEventFil[MAPEVENTNUMBER]; int MapEventEve[MAPEVENTNUMBER]; int ForEventVar[MAPEVENTNUMBER]; //マップチップ int MapChip[MAPXY][MAPXY]; int MapChipNumber; int MapX; int MapY; int MapGraph[20]; //フィールドマップの座標? char FieldCo[100][100]; //全共用ファイル FILE *fp; //いまどこ?? int Where=0; int WhereLOG=0; //戦闘にどの音楽を使うか int WhatMusic=0; //戦闘にどの画像を使うか int WhatGraph=0; //戦闘中どのウィンドウを表示しているか int NowWindow=0; int NowWindowLOG=0; bool NowWindow2=0; //一度でもesckeyが押されたか int EscEsc=0; //フォントハンドル int NormalFont=0; int VerySmallFont=0; int ForDamageFont=0; int White=0; int Black=0; int LightBlue=0; //現在ウィンドウに表示している技の詳しい説明のはこ? struct CCCCCC{ char Name[31]; int Type; char TypeC[2]; int UseGrad; char UseGradC[4]; int UseACT; char UseACTC[4]; int Attribute[11]; char AttributeC[11][2]; int Number; char NumberC[4]; int Effect; char EffectC[4]; }Skills[SKILLNUMBER]; //オーダーシステム! int order[12]; //技発動中の画像表示 struct EEEEEEEE{ int X; int Y; int Handle; int Blender; }SkillsGraph[40]; //技の動きの時間コントロール int T=0; int TBegPoi=0; int SkillsSound=0; int Damage=0; int Damage2=0; int DamageAttacker=0; int DamageDrawPer=0; int CureDrawPer=0; //戦闘が終わったかどうか bool BattleEnd=0; //サブウィンドウに表示する文字 char SubString[69]; int SubStringWidth; //戦闘終了後どのアイテムを手に入れたか int ItemGet[9]; //メニュー画面の仲間の会話で、どの会話をしゃべらせるか。 int MenuTalk[10]; ///カメラ int CameraX=0; int CameraY=0; bool CameraFrag=0; //イベント関係 int EventCheck=0; //今何番のイベントが発動中か int EventArgs[MAPEVENTNUMBER][5]; //各イベントが使える引数 //会話 struct FFFFFF{ int FaceHandle; char Speaker[8]; bool Exsit; char String[201]; }TalkWindow[6]; int TalkCheck; char TalkMode=0; char PreString[201]; int TalkT=0; char NowTalkWindow=0; //フィルター int FilterColor=0; int FilterBlend=0; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow ){ SetOutApplicationLogValidFlag(FALSE); SetGraphMode(640,480,32); ChangeWindowMode(TRUE); if( DxLib_Init() == -1 )return -1; SetDrawScreen(DX_SCREEN_BACK); White=GetColor(255,255,255); while(ProcessMessage()==0&&CheckHitKey(KEY_INPUT_ESCAPE)==FALSE){ ClsDrawScreen(); TalkWindow[0].String[0]=5; DrawFormatString(10,10,White,"%d",TalkWindow[0].String[0]); for(loop1=0;loop1<20;loop1++){ DrawFormatString(20,10+loop1*20,White,"%d",TalkWindow[0].Speaker[loop1]); } ScreenFlip(); } InitGraph(); InitFontToHandle(); InitSoundMem(); DxLib_End(); return 0; } 変数の宣言が長いのですが、一応これでも問題の現象が発生してしまいます。
Re: 変数の数 ( No.4 )
名前: 日時:2007/01/30 19:30

 とりあえず具体的にどんな現象が発生していますか?
Re: 変数の数 ( No.5 )
名前:IHIW 日時:2007/01/31 05:36

すいません。自己解決いたしました。 どうやら、配列の数が足らなかったことが原因のようです。
Re: 変数の数 ( No.6 )
名前: 日時:2007/02/02 18:00

 そうですかー。  蛇足ですが、用途毎に構造体なりクラスなりでまとめた方が良いと思いますよ。  戦闘やキャラはまとめてありますが、それ以外にも工夫することで格段に見やすくなります。  それではー。

Page: 1 |