私はCでゲームのアトムを作っています。私は移動を追跡するシステムを実装しようとしています。移動するたびに、移動の配列が1つ増えます。それほど効率的ではありません(私はmallocの戻り値をチェックしていないことを知っています)。しかし、今のところ少なくともそれを取得しようとしています。ここで私はそれをやっている方法は次のとおりです。mallocが4回目の呼び出しでプログラムをクラッシュさせます
int move_count_temp = (game->move_count)+1;
move_t* moves;
//Check if it's first move
if (game->moves == NULL) moves = (move_t*)malloc(sizeof(move_t*));
else moves = (move_t*)malloc(move_count_temp*sizeof(move_t*));
// Copy old moves over
for (int i=0; i<game->move_count;i++) {
moves[i].x = game->moves[i].x;
moves[i].y = game->moves[i].y;
}
//Copy current move
moves[move_count_temp-1].x = y_coordinate;
moves[move_count_temp-1].y = x_coordinate;
// Free old moves pointer and assign new one
free(game->moves);
game->moves = moves;
game->move_count = move_count_temp;
問題がmoves
をmallocingとき、それは、そのサンプル中の4行目にクラッシュした第四の動きです。私はしばらくそれを修正しようとしていて、なぜそれが起こっているのか分からない。どんな洞察が助けになるでしょう、ありがとう。
P.S.ゲーム構造体にはmove構造体へのポインタがあり、これはmove_t構造体です。
struct move_t {
int x;
int y;
};
すばらしい助けをありがとう!それは今働いているようです(私はC++コンパイラを使用しているのでキャストし、そうでなければエラーを返します)。 – Jayce444
はい、C++にはキャストが必要です。 –
@ Jayce444 C++でCコンパイラやコードを使用すると、C++コンパイラでCコードをコンパイルできません(Cヘッダのみ).CはC++のサブセットではなく、C++はCのスーパーセットではありません。 – 12431234123412341234123