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 :

Fonction renvoyant un record dont le @Result vaut nil !


Sujet :

Langage Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Par défaut Fonction renvoyant un record dont le @Result vaut nil !
    Bonjour,

    Je viens de tomber sur un problème très étrange, j'ai une fonction membre d'une classe qui renvoie un TGsdx (pas important, c'est juste un record que j'ai créé). Lorsque je modifie l'une de ses valeurs ça me fait une violation d'accès avec adresse 0 (comme une variable objet non instanciée). Ca n'a aucun sens, je renvoie juste un record, et ça déconne uniquement quand cette méthode est membre d'une classe, en temps normal ça marche bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function TYYY.CopyGsToGsdx(const Gs: TGs): TGsdx;
    begin
         Result.Nom := 'a'; // Violation d'accès
    end;
    J'ai volontairement simplifié ma fonction au maximum, d'où la non-utilité du paramètre Gs.
    Gsdx.Nom est un "string[20]", pour info.
    L'instance de TYYY appelée est bien instanciée, vu que toutes les autres méthodes renvoyant des types standards (int, double, string) fonctionne bien.

    Pour info (bis), on ne peut pas voir la valeur de Result pendant le débuggage et la valeur de @Result vaut nil

    Si qqun a une idée ...

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Par défaut
    Bon j'ai trouvé, en fait dans les structures TGs et TGsdx il y avait un tableau identique dont le nombre d'éléments dépendaient de la valeur d'une constante. Or, ces deux structures étaient définies dans des fichiers différents, et la fameuse constante était écrite deux fois, avec une valeur différente à chaque fois. Vu que plus tôt que je faisais des opérations à partir des ces deux tableaux ça devait faire pas mal de b... en mémoire. J'ai effacé la constante en trop et tout est rentré dans l'ordre.

    Je laisse mon message quand même car il peut être intéressant de savoir que l'adresse de la valeur de retour d'une fonction peut être nil, et ça donnera une piste à ceux qui tombe sur le même phénomène.

  3. #3
    Expert confirmé

    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 : 35
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Même si tu as résolu ton problème, je reste perplexe quant au @Result = nil.
    Peux-tu reproduire le problème dans un mini projet, avec juste le problème ? Si oui, j'aimerais beaucoup examiner les causes de ce phénomène.

    C'est le même genre de trucs qui paraissent absurdes et qui en fait ont une explication que les paramètres const qui changent de valeur Or j'aime beaucoup comprendre ce genre de "subtilités"
    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.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Par défaut
    J'étais parti en vacs, désolé pour l'attente. D'accord, je vais regarder s'il est possible d'isoler ce problème dans un nouveau projet et si j'y arrive je le posterai ici.

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

Discussions similaires

  1. [Turbo Pascal] Renvoyer un record dans une fonction
    Par EpiTouille dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 29/06/2011, 18h52
  2. Fonction renvoyant 0 ou 1
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/10/2005, 10h56
  3. [LG]Resultat de fonction de type Record ?
    Par Mike888 dans le forum Langage
    Réponses: 10
    Dernier message: 24/01/2004, 22h48
  4. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33
  5. fonction renvoyant un tableau en argument
    Par Jones dans le forum Langage
    Réponses: 6
    Dernier message: 30/09/2002, 18h20

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