IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Copie de array of array of variant


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Points : 171
    Points
    171
    Par défaut Copie de array of array of variant
    Bonjour,

    De toutes les discussions et littératures que j'ai lues, je pensais benoîtement que la fonction copy faisait une copie complète d'un tableau dynamique, et non pas seulement une affectation de pointeur. Or si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    type
       taoaov=array of array of variant;
     
    var
       a, b: taoaov;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
       i, j: integer;
    begin
    // détermination de la taille du tableau
    setlength(a, 5, 5);
     
    // et affectation de n'importe quoi
    for i:=0 to high(a) do
       begin
       for j:=0 to high(a[i]) do
          begin
          a[i, j]:=i*j;
          end;
       end;
     
    // copie du tableau a dans b
    b:=copy(a);
     
    // au débugage les pointeurs vers a et b sont différents !
    // @a=$A3EFF8
    // @b=$A3EFFC
     
    // affectation d'une valeur à b[0, 0]
    b[0, 0]='x';
     
    // a[0, 0] devient aussi x
    // à quoi sert copy alors ? autant écrire b:=a ? 
     
    end;
    NB : j'ai aussi essayé à la place de copy :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Move(Pointer(a)^, Pointer(b)^, SizeOf(a[0]) * Length(a);
    Mais ça fait pareil.

    J'ai sans doute, ENCORE, loupé quelque chose ...
    Faut-il vraiment passer par une double boucle pour faire une copie indépendante ?
    Merci de vos lumières ;o)

    Yvan

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 710
    Points : 25 593
    Points
    25 593
    Par défaut
    Cherche sur le forum, on a parlé de ça il y a quelques semaines !

    copier un tableau dynamique à deux dimensions
    évoqué dans
    Copie de variable de type record comprenant des éléments de type structuré

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Points : 171
    Points
    171
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Cherche sur le forum, on a parlé de ça il y a quelques semaines !

    copier un tableau dynamique à deux dimensions
    évoqué dans
    Copie de variable de type record comprenant des éléments de type structuré
    Le premier lien je l'ai déjà lu tout à l'heure avant d'ouvrir mon sujet, car je n'avais pas vu de solution au problème ... mais je n'avais pas vu qu'il y avait une deuxième page ... oups ... je vais le revoir mais je n'ai pas tout compris .

    Quant au second, je le connais bien car j'en suis à l'origine, mais je croyais justement avoir compris que copy résolvait le problème puisque c'est ce qu'on m'avait au final conseillé d'utiliser dans le class operator... mais j'avais encore mal compris il semble ...

    Je vais reprendre à tête reposée car j'ai dû, comme je l'ai dit en premier, louper quelque chose ...
    Pour l'instant je fonctionne avec une double boucle qui répond à mon problème, mais je cherchais une solution plus élégante et surtout rapide, mais il semble que ce ne soit pas si simple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. deep copy avec Array.from
    Par rafoim dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/05/2021, 01h15
  2. Problème copie variable array.
    Par Azrad dans le forum Lua
    Réponses: 0
    Dernier message: 04/04/2020, 18h09
  3. Problème entre boost::array std::copy et les vector
    Par Davidbrcz dans le forum Boost
    Réponses: 4
    Dernier message: 27/03/2008, 20h20
  4. Copy String to array of char
    Par Ardely dans le forum Delphi
    Réponses: 11
    Dernier message: 11/02/2007, 01h24
  5. Déclaration de type array of array of variant
    Par Drooxy dans le forum Delphi
    Réponses: 4
    Dernier message: 14/12/2006, 20h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo