当是我在我的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点板的指针指向同一个内存位置,但我不明白的第二个行为。
感谢您的帮助
啊,一个三星级的程序员。 – EOF
'sizeof(struct move ***)'是错误的大小。然而你只需将's1-> board'设置为's0-> board'(带有第一个memcpy),所以第二个memcpy会导致未定义的行为,因为它具有相同的源和目标。你还没有说你想做什么,但我想你正在试图制作一份电路板的副本,而不是让一个电路板上有两个指针指向它? (如果是这样,请更新您的问题以包含此信息,并显示您如何分配董事会首先)。 –
你也没有说明你从第二个memcpy观察到的行为(也不是你期望它做什么)。 –