C++ copie de tableaux avec memcpy

Bonjour,

Ca me parait assez basique comme question mais je n’arrive pourtant pas a trouver la réponse sur google…

J’ai une structure :


struct maStruct {
unsigned char a;
unsigned char b;
}

et un tableau de tableau de ma structure (disons de taille taille1*taille2 : tableau[i][j] pour acceder a un élément, i < taille1 et j < taille2…)


maStruct** tableau1
maStruct** tableau2

et pour copier tableau2 dans tableau1 j’ai essayé deux méthodes :


memcpy( tableau1 , tableau2 , sizeof(unsigned char)*2*taille1*taille2)
 
ou alors :

Pour i de 0 a taille1
      memcpy( tableau1[i] , tableau2[i] , sizeof(unsigned char)*2*taille2)

la seconde méthode semble marcher, et pas la premiere? est ce que je fait une erreur quelque part?

merci
Edité le 27/11/2007 à 14:33

Dans le premier cas tu copies un pointeur d’adresse alors que dans le second cas tu copies les éléments se trouvant à l’adresse, ce qui est différent.

Donc je suis obligé de faire une boucle pour copier les éléments contenus dans un tableau de tableau?
Je peux pas tout copier d’un bloc avec memcpy?

memcpy copie une zone contigue de mémoire, donc je diras que ça dépend comment tu as alloué ton tableau. (et comment fait le compilateur pour l’allouer)
mais de toute façon, il faut un pointeur sur tableau, pas un pointeur sur le pointeur:
memcpy( *tableau1 , tableau2 , sizeof(unsigned char)2taille1taille2)

Note: pourquoi tu ne fais pas de sizeof(monStruct) ? il peut y avoir un problème si le compilateur optimise les emplacements mémoire (s’il aligne sur la mémoire, et ça peut faire + de 2 octets)

Je note ta “Note”, et merci pour les précisions :slight_smile: