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

Free Pascal Discussion :

Problème d'affectation d'un pointeur [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Problème d'affectation d'un pointeur
    Bonjour,

    J'ai un problème dans l'affectation d'un pointeur. Je m'explique :
    J'affecte par l'intermédiaire d'une procédure une valeur à un pointeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure ini_log1(var point:logs);
      begin
      point^.tabl:=initab;
      point^.tour_en_cours:=1;
      point^.joueur_en_cours:=1;
      point^.nombre_de_joueurs:=1;
      point^.timer_blue:=300;
      point^.timer_red:=300;
      point^.timer_green:=300;
      point^.timer_yellow:=300;
      point^.precedent:=nil;
      end;
    Puis j'utilise cette valeur dans ma procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    new(log_partie);ini_log1(log_partie);
    new(point);
    ini_log1(point);
    new(point2);
    ini_log1(point2);
    log_partie^.precedent:=point;
    point^.precedent:=point2;
    resultat:=defaite_multi(timer_red,timer_blue,timer_green,timer_yellow,log_partie,joueur,tour,tab);
    oracle_positif(resultat,test,texte);
    dispose(log_partie);
    dispose(point);
    dispose(point2);
    Mais celle-ci marche pas sauf si j'essaye de voir la valeur dans le pointeur avant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    new(log_partie);ini_log1(log_partie);
    new(point);
    ini_log1(point);
    new(point2);
    ini_log1(point2);
    log_partie^.precedent:=point;
    point^.precedent:=point2;
    writeln(log_partie^.joueur_en_cours);//bug
    resultat:=defaite_multi(timer_red,timer_blue,timer_green,timer_yellow,log_partie,joueur,tour,tab);
    oracle_positif(resultat,test,texte);
    dispose(log_partie);
    dispose(point);
    dispose(point2);
    Est-ce que quelqu'un aurait une idée d'où ce bug peut provenir?

  2. #2
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    Il manque certaines infos pour déterminer l'origine du problème, notamment la définition de la structure pointée par le type "logs".

    Et vous n'indiquez pas ce qui ne "marche pas": erreur lors de l'exécution, mauvaise valeur, ... ?

    Ci-après un test très simple basé sur votre code, et qui a pourtant l'air de "marcher" (enfin pour ce que je crois en avoir compris):
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    program test;
     
    type
      LOGS = ^LOGSDATA;
      LOGSDATA = record
        tabl:               pointer; //?
        tour_en_cours:      integer;
        joueur_en_cours:    integer;
        nombre_de_joueurs:  integer;
        timer_blue:         integer;
        timer_red:          integer;
        timer_green:        integer;
        timer_yellow:       integer;
        precedent:          LOGS;
      end;
     
    procedure ini_log1(var point:logs);
    begin
    //  point^.tabl:=initab;
      point^.tour_en_cours:=1;
      point^.joueur_en_cours:=1;
      point^.nombre_de_joueurs:=1;
      point^.timer_blue:=300;
      point^.timer_red:=300;
      point^.timer_green:=300;
      point^.timer_yellow:=300;
      point^.precedent:=nil;
    end;
     
    var
      log_partie, point, point2: LOGS;
     
    begin
      new(log_partie);ini_log1(log_partie);
      new(point);
      ini_log1(point);
      new(point2);
      ini_log1(point2);
      log_partie^.precedent:=point;
      point^.precedent:=point2;
      writeln(log_partie^.joueur_en_cours);
      writeln(log_partie^.precedent^.joueur_en_cours);
      writeln(log_partie^.precedent^.precedent^.joueur_en_cours);
    //  resultat:=defaite_multi(timer_red,timer_blue,timer_green,timer_yellow,log_partie,joueur,tour,tab);
    //  oracle_positif(resultat,test,texte);
      dispose(log_partie);
      dispose(point);
      dispose(point2);
    end.
    Résultat:
    ...>test
    1
    1
    1

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci pour la réponse, j'ai voulut recréer un environnement dans un mini programme pour expliquer le bug mais quand je l'ai fait le bug n'est pas apparu dans le mini programme.Du coup je vais chercher dans ce sens voir si je trouve une différence entre celui-ci et le programme principal.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/04/2006, 09h39
  2. Erreur sur l'affection d'un pointeur
    Par digital prophecy dans le forum C
    Réponses: 4
    Dernier message: 25/11/2005, 09h07
  3. Problème d'affectation de variable
    Par bob33 dans le forum C
    Réponses: 3
    Dernier message: 04/11/2005, 17h01
  4. problème d'affectation de tableau ...
    Par Mike888 dans le forum C
    Réponses: 23
    Dernier message: 26/02/2005, 14h52
  5. Entier 64 bits sous linux, problème d'affectation
    Par Steki-kun dans le forum Linux
    Réponses: 2
    Dernier message: 13/01/2005, 21h10

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