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 :

New n'initialise pas la structure


Sujet :

Langage Delphi

  1. #1
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    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 522
    Points : 25 052
    Points
    25 052
    Par défaut New n'initialise pas la structure
    J'ai un problème sur l'allocation de pointeur sur une structure, le new n'Initialize pas les données, c'est à dire qu'il ne la rempli pas avec des Zéros

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {* ----------------------------------------------------------------------------}
    function THPrimMessage.NewPatient(const Index: Integer): PHPrimStructPatient;
    begin
      New(Result);
      Result^.SegmentType := HPRIM_SEGMENT_TYPE[hstPatient];
      Result^.SegmentNum := Index + 1;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PHPrimStructPatient = ^THPrimStructPatient;
      THPrimStructPatient = record
        SegmentType: string;                                 // 8.1
        SegmentNum: Integer;                                 // 8.2
        IDDemandeur: record
          ID: string;        
          ...
    cela contient aussi des TDateTime et des Enumérations, mon problème c'est que ceci ne sont pas mis à Zéro, alors que le New normalement doit mettre à Zéro tous les champs

    Dans une application de test, cela fonctionne parfaitement
    Dans l'application réelle, cela laisse trainer des valeurs !

    Etrange, quelqu'un a déjà eu un problème similaire ?
    Une directive de compilation ?
    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

  2. #2
    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
    New n'initialise que les champs qui requièrent une initialisation. Donc les string et les tableaux dynamiques, oui, par exemple. Mais les énumérations ou les entiers, il n'est en rien tenu de les initialiser. Si tu veux mettre des zéros dans ta structure, utilise FillChar.
    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.

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    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 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Ah, donc le fait que mes DateTime ou Enumération dans mon application des tests, n'est qu'un hazard d'une faible charge de mémoire ?
    Il est vrai que c'est rare que j'ai ce genre de type et que j'ai surtout besoin de controler leur contenu car je ne remplis que partiellement les structures alors que la plupart du temps, je faisais une initialization propre et explicite de chaque champ (j'en ai trop dans mon cas)

    bon, je vais donc faire comme je le faisais pour mes GetMem

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {* ----------------------------------------------------------------------------}
    function THPrimMessage.NewPatient(const Index: Integer): PHPrimStructPatient;
    begin
      New(Result);
      ZeroMemory(Result, SizeOf(Result^));
      Result^.SegmentType := HPRIM_SEGMENT_TYPE[hstPatient];
      Result^.SegmentNum := Index + 1;
    end;
    ZeroMemory appelle FillChar, c'est juste plus clair pour la maintenance du code ...
    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

  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
    Un p'tit alors ?
    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: 6
    Dernier message: 31/03/2007, 01h39
  2. Réponses: 4
    Dernier message: 01/11/2006, 15h20
  3. Réponses: 6
    Dernier message: 04/09/2006, 15h48
  4. [9i] Crypter les données mais pas la structure
    Par nuke_y dans le forum Oracle
    Réponses: 38
    Dernier message: 27/02/2006, 11h23
  5. [Initialisation] Remplir une structure une fois
    Par Kimael dans le forum Langage
    Réponses: 14
    Dernier message: 08/06/2004, 15h33

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