【发布时间】:2016-04-12 21:18:51
【问题描述】:
我无法理解为什么 2 个板指针指向同一个内存位置,以下是我在 game.c 中的情况:
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;
这是我的游戏。h:
struct state {
struct player * current_player;
struct move *** board;
enum game_status status;
const struct state * next; };
我知道在第一个 memcpy 之后 2 个板指针指向内存中的同一位置,但我不明白第二个的行为。
感谢您的帮助
【问题讨论】:
-
啊,三星级程序员。
-
sizeof(struct move ***)是错误的大小。但是,您只需将s1->board设置为等于s0->board(使用第一个 memcpy),因此第二个 memcpy 会导致未定义的行为,因为它具有相同的源和目标。您还没有说您要做什么,但我想您是在尝试制作电路板的副本,而不是让一个电路板带有两个指向它的指针? (如果是这样,请更新您的问题以包含此信息,并首先显示您如何分配董事会)。 -
你也没有说你从第二个 memcpy 中观察到了什么行为(也没有说你期望它做什么)。
-
为什么不会它们指向同一个位置?您的程序将 s0 复制到 s1。您似乎很惊讶在将 s0 复制到 s1 之后,s0 和 s1 包含相同的值......即使这是复制某些内容的全部意义,不是吗? (“值”包括指针的值)。