Je vais avoir du mal à comprendre pourquoi les 2 pointeurs du conseil d'administration pointent vers le même emplacement mémoire, suivant est ma situation dans mon game.c:memcpy problème lors de la copie d'un pointeur vers une struct
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;
et voici mon game.h:
struct state {
struct player * current_player;
struct move *** board;
enum game_status status;
const struct state * next; };
Je comprends que, après la première memcpy les 2 pointeurs du conseil d'administration pointent vers le même emplacement en mémoire, mais je ne comprends pas le comportement du second.
Merci pour l'aide
Ah, un programmeur trois étoiles. – EOF
'sizeof (struct move ***)' a la mauvaise taille. Cependant, il suffit de mettre 's1-> board' pour égaler' s0-> board' (avec le premier memcpy), donc le second memcpy provoque un comportement indéfini puisqu'il a la même source et la même cible.Vous n'avez pas dit ce que vous essayez de faire mais je suppose que vous essayez de faire une copie du tableau, au lieu d'avoir un tableau avec deux pointeurs pointant vers lui? (Si c'est le cas, mettez à jour votre question pour inclure cette information et montrez également comment vous répartissez le tableau en premier lieu). –
Vous aussi n'a pas dit quel comportement vous avez observé de la deuxième memcpy (ni ce que vous vous attendiez à faire). –