私は、私のマップであるマルチディメンション配列へのポインタを使用しようとしています。したがって、最後のコードでは、すべてのマップでコリジョンを生成する代わりにポインタを使用できます。不幸にも、地図を描いた後、矢印を押して移動すると、プログラムがクラッシュします。 デバッガは、これはマップの一つであるタイトルC++ consoleプログラム受信シグナルSIGSEGV、セグメンテーションフォールト
にあるものだけを私に言った:
char *map2[15] = {
"###^######^###",
"#L #",
"^S #",
"#S #",
"# K #",
"########### #",
"#G #",
"# #### #",
"# #M #",
"# @ # #",
"## ########^##"};
これは初めである:
マップや移動を示す mainmap = false;
x = 2;
game.showing_different_maps(15, map2); // (y, somemap)
:
void Game::showing_different_maps(int y, char **somemap)
{
bool differentmap = true;
while (differentmap)
{
system("cls");
for(int i = 0; i < y; i++) // i < map2[y][]
{
cout << somemap[i] << endl; // drawing a map !THIS CAUSES CRASH!
}
system("pause>nul");
if(GetAsyncKeyState(VK_UP))
{
mapki.move(-1, 0);
}
if(GetAsyncKeyState(VK_DOWN))
{
mapki.move(1, 0);
}
if(GetAsyncKeyState(VK_RIGHT))
{
mapki.move(0, 1);
}
if(GetAsyncKeyState(VK_LEFT))
{
mapki.move(0, -1);
}
}
を
}
衝突を扱うスクリプト:
void Maps::move(int V, int H)
{
int y2 = y + V;
int x2 = x + H;
if(map2[y][x2] == ' '
|| map2[y][x2] == 'K'
|| map2[y][x2] == 'W')
{
map2[y][x] = ' ';
x += H;
map2[y][x] = '@';
}
if(map2[y2][x] == ' '
|| map2[y2][x] == 'K'
|| map2[y2][x] == 'W')
{
map2[y][x] = ' ';
y += V;
map2[y][x] = '@';
}
}
私は[] [] [] []、代わりにMAP2のsomemapどこでも書きたかったが、それが動作するかどうか、私はチェックcan`t、 "の理由プログラム受信信号SIGSEGV、セグメンテーションフォルト。クラッシュ。
tl; dr try .. gdb :) LinuxとMingwのウィンドウで 'gdb。/ yourapp'を実行し、実行すると入力してから' bt'を入力するとsegfaultedが表示されます。 ) – nayana
あなたの配列の要素は 'const'文字列を指していて、それらの文字列を変更することは未定義です。コンパイラは 'char *'への非難された変換について警告していたはずです。 – molbdnilo
テストせずにあまりにも多くをやろうとしています。一度に1つの問題を解決してください。まず、描画コードが動作するようにします。クラッシュせずに地図を描画できない場合は、地図をナビゲートすることはできません。加えて、あなたは[mcve]を持っていることに近づきます。 – user4581301