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

Delphi Discussion :

Initialisation tableau dynamique


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut Initialisation tableau dynamique
    salut, petites question sur les tableaux dynamiques que je decouvre... ;o)

    voila ce que je declare:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    type t_client=record
      nb_prod:integer;
      ds_date:array[0..10] of word;
      actif:byte;
      valide:boolean;
      derniere_visite:array[0..10] of boolean;
    end;
     
    var  tab_clients:array of t_client;
    pour initialiser le tableau je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     setlength(tab_clients,num_client+1);
    et je le remplie, je voulais savoir comment je fais pour le vider ?

    faut il faire un setlength(tab_client,0) ou un finalize(tab_clients) ?

    en faisant ca, ca libere bien le tableau ?

    merci

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      SetLength(tab_client,0);
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      tab_client := nil;
    devrait suffire.

    @+

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut
    merci,

    j'avais un doute suite a des resultats bizarres de tps en tps....

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    En fait c'est beaucoup plus simple : il suffit de ne rien faire
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par sjrd
    En fait c'est beaucoup plus simple : il suffit de ne rien faire
    Ah !! Si tu avais une ch'tiote explication... TabClient est bien un tableau dynamique d'où mon étonnement en lisant ta remarque.

    @+ Claudius

  6. #6
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Les tableaux dynamiques sont gérés tout seul par le langage Delphi. Il se charge de les finaliser et de les libérer lorsque l'on quitte leur portée, même s'ils sont non vides.

    Si je veux expliquer comment il fait, je peux commencer à t'expliquer tout le fonctionnement des RTTI, des types à finaliser, etc. Donc c'est de la matière pour tout un cours
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Ce comportement est expliqué dans le tuto de Laurent Dardenne ?

  8. #8
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Non il s'agit de concepts plus avancés et non utilisables directement, qui dépassent le cadre d'une étude des RTTI, et rentre dans une étude profonde du fonctionnement à l'exécution du langage Delphi, même si ce point précis fait usage de RTTI.

    Pour être honnête avec toi, c'est bien parce je fais personnellement des recherches poussées sur le sujet que je suis au courant
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    c'est bien parce je fais personnellement des recherches poussées sur le sujet que je suis au courant
    Ne serait ce pas lié au projet SEPI?

  10. #10
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par Fabrice ROUXEL 1
    Ne serait ce pas lié au projet SEPI?
    Si, c'est exactement ça Comment t'as deviné ?
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par sjrd
    Pour être honnête avec toi, c'est bien parce je fais personnellement des recherches poussées sur le sujet que je suis au courant
    Alors dans ce cas je te crois sur parole, en espérant qu'un jour tu auras peut-être le temps de nous faire un tuto de derrière les fagots.

    @+ Claudius

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    je deubte et voudrais quelques precisions concernant le fait de ne pas 'vider' un tabeau et de la portée du dit tableau.

    J utilise la fonction explode dont j ai trouvé le lien sur le site pour chaque ligne du fichier parcouru à l aide de ReadLn.

    Mon fichier txt a 36 ligne de 56 valeurs separees par des ;

    Donc je voudrais savoir si le tableau se vide automatiquement chaqe fois que je rapelle la fonction avec MonTableau := Explode(Ligne,';'); pour ne pas avoir les valeurs precedentes du tabelau pour une cellule qui est vide a l issue du nouveau explode

    bon je sais pas si j ai été tres clair....en tous les cas j espere que oui

    merci

  13. #13
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Oui, il se vide bien automatiquement lorsque tu appelles la fonction, si du moins tu l'appelles bien comme tu l'as indiqué dans ton message.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    merci pour cette rponse.
    effectivement je l appelle correctement et tout est ok mais une derniere question.
    A l issue de la lecture derniere ligne du dernier fichier dois-je liberer la mémoire ( si c est le terme ) en vidant le dit tableau parce que si j ai compris ce que j ai lu plus haut dans le fil du post, le fait de quitter cette procedure libererais automatiquement la mémoire et de de fait mon intervention deviendrait inutile

    merci

  15. #15
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Non, tu as bien compris, tu n'as aucun besoin de libérer ou vider ton tableau explicitement après sa dernière utilisation.

    La sortie de la procédure le fera automatiquement.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  16. #16
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 469
    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 469
    Points : 24 905
    Points
    24 905
    Par défaut
    J'ajouterais une précision, effectivement la mémoire du Tableau Dynamique est entièrement géré par Delphi ... très pratique, et un bonus, "la valeur 0 ou nil est attribuée à l'espace nouvellement alloué" (extrait de l'aide).
    Pour les curieux rouver cette phrase : "Set the new memory to all zero bits" dans System.pas ...

    Pour un Tableau Fixe, idem, Allocation et libération sont faites mais différement, c'est sur la pile (je crois), ... le tableau dynamique étant un pointeur c'est dans le tas ? et pas de bonus, on se chope dans le tableau, toutes les merdes déjà présentes, un ZeroMemory est donc vivement recommandé !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  17. #17
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par ShaiLeTroll
    Pour un Tableau Fixe, idem, Allocation et libération sont faites mais différement, c'est sur la pile (je crois), ...
    Oui c'est bien sur la pile (enfin les tableaux statiques variables locales, pas ceux qui sont membres d'objets ou variables globales).
    Citation Envoyé par ShaiLeTroll
    le tableau dynamique étant un pointeur c'est dans le tas ?
    En effet, le contenu du tableau dynamique est sur le tas.
    Citation Envoyé par ShaiLeTroll
    et pas de bonus, on se chope dans le tableau, toutes les merdes déjà présentes, un ZeroMemory est donc vivement recommandé !
    Sauf si c'est un tableau de string ou autres types requérant une initialisation Alors il est bien initialisé à 0 (alias nil et varEmpty )
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/11/2011, 10h41
  2. Initialisation d'un tableau dynamique
    Par TheBombadil dans le forum Débuter
    Réponses: 2
    Dernier message: 13/11/2010, 11h44
  3. initialisation tableau dynamique
    Par mikew75 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 17/11/2008, 13h06
  4. Réponses: 18
    Dernier message: 02/04/2008, 04h11
  5. [Tableau] Initialisation d'un tableau dynamique
    Par Rayek dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2007, 08h24

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