へのポインタをコピーするとき、次は私のgame.cで私の状況です:memcpyの問題2つのボードのポインタが同じメモリ位置を指して、なぜ私が悩みの理解を抱えている構造体
int game_state_transition(const struct state * s0, const struct move * m, struct state * s1) {
memcpy(s1, s0, sizeof(struct state));
memcpy(s1->board, s0->board, sizeof(struct move ***));
if (game_update(s1, m)){
printf("%p\n", s1->board);
printf("%p\n", s0->board);
game_print(s0);
s1->next = s0;
return 1;
}
return 0;
、ここでは私ですgame.h:
struct state {
struct player * current_player;
struct move *** board;
enum game_status status;
const struct state * next; };
私は最初のmemcpy後2つのボードのポインタはメモリ内の同じ場所を指していることを理解し、私は第二の行動を理解していません。助けのための
おかげで
ああ、3つ星のプログラマです。 – EOF
'sizeof(struct move ***)'のサイズが間違っています。しかし、あなたは 's1-> board'を' s0-> board'(最初のmemcpyと同じ)に設定するだけなので、2番目のmemcpyは同じソースとターゲットを持っているので未定義の動作を引き起こします。あなたは何をしようとしているのかは言いませんでしたが、ボードのコピーを作成しようとしています。 (もしそうなら、あなたの質問を更新してこの情報を含み、最初にボードをどのように割り当てるかを示す)。 –
また、2回目のmemcpyからどのような動作が観察されたのか(また、何を期待していたのか)も言わなかった。 –