Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1909 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Pointeur vers une variable (record) de type : array of array of ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pointeur vers une variable (record) de type : array of array of ...

n°1034013
Profil sup​primé
Posté le 04-04-2005 à 08:50:53  answer
 

Bonjour à tous.  :hello:  
Voilà j'ai certaines difficultés avec l'utilisation d'un pointeur (Delphi).

Code :
  1. TTableau = array of array of TID_Tableau;
  2. TEn_tete = record
  3.            ...
  4.            ... 
  5.            Matrice : TTableau ;
  6.           end;     
  7.                    
  8. var PEn_tete  : ^TEn_tete;


 
Comme vous voyez PEn_tete est un pointeur qui pointe vers des varaibles dynamique de type TEn_tete composées de record et entre autre justement de TTableau qui est un tableau dynamique.
 
Bref, pour mon programme je crée un nombre important de varaible TEn_tete grâce au pointeur: new(PEn_tete), le pointeur correspondant est sauvegardé dans une TList: List.Add(PEn_tete).  
Le problème est que justement les données (List[X]^.Matrice[i,j].Y) que je lis grâce à l'appel du pointeur dans la list sont complètement érronés, tous les pointeurs dans la liste pointent vers une matrice qui on toutes les données de la dernière matrice enregistrée.
 
Or ce phénomène ne se passe pas quand j'utilise un tableau fix (Ca serait logique non? Car le compilateur ne sait pas combien de mémoire allouer dans le cas d'un tableau dynamique, c'est ça???):  

Code :
  1. TTableau = array [0..2,0..2] of TID_Tableau;


 
Est-ce que la création de variable dynamique (de type array of array of) grâce à des pointeurs est impossible????
J'ai malheursement rien trouvé dans des livres ni sur le site.
 
Merci beaucoup de votre aide.  :jap:

mood
Publicité
Posté le 04-04-2005 à 08:50:53  profilanswer
 

n°1034163
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-04-2005 à 12:10:55  profilanswer
 

Quand tu remplis les champs de ton tableau, tu le redimensionnes bien ? (avec SetLength)
 
Tu peux activer l'option Range Checking dans Project -> Options -> Compiler le temps de trouver le problème.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1034164
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-04-2005 à 12:12:26  profilanswer
 

Au passage, à moins d'être obligé d'utiliser un record, j'utiliserais des objets (déclarés comme class au lieu de record donc) et une TObjectList pour ne pas avoir à gérer les désallocations.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1034183
Profil sup​primé
Posté le 04-04-2005 à 12:38:00  answer
 

Ben, à un moment du programme je suis obligé de créer des varaibles dynamiques:

Code :
  1. new(PEn_tete);
  2. ...
  3. PEn_tete^.Matrice := Matrice_Jeu;


Et la matrice : Matrice_Jeu est une variable globale et a été dimensionée à la création de la fiche principale (oncreate).
 

  • Faut-il aussi dimension "PEn_tete^.Matrice" avec SetLength avant que je n'y stock Matrice_Jeu ??? (j'ai essayé et ça n'a pas marché semble-t-il)


  • Par la suite, je me suis dit que le compilateur ne sait pas combien de mémoire alouer à PEn_tete^.Matrice, et donc je me suis dit que je ferais mieux d'utiliser GetMem au lieu de New qui me permet de déterminer la taille en mémoire (Size of du record), mais j'ai un message d'erreur  :( .


Concernant ta proposition d'utiliser des class et TObjectList, ben là je suis désolé tu m'en demandes trop j'ai jamais travaillé avec ces choses là  :(.  
 
Sur un autre forum on m'a dit le suivant:

Citation :

une variable tableau ouvert est un pointeur, donc tu dois le déréférencer :  
 
List[X]^.Matrice^[i,j].Y)

Citation :

2 choses :  
- pas de new, mais setlength(tableau ouvert, nb d'éléments) pour réserver la place  
 
- PEn_tete(List[X])^.Matrice^[i,j].Y marchera pê mieux car je pense que ta liste n'est pas typée...


 
????
Bref je patauge dans la mouise  :D .  
 :jap:


Message édité par Profil supprimé le 04-04-2005 à 12:55:40
n°1034201
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-04-2005 à 12:46:45  profilanswer
 

Ces histoires de pointeurs et de tableaux dynamiques j'ose pas trop y toucher :D En général je me contente des objets et des listes :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Pointeur vers une variable (record) de type : array of array of ...

 

Sujets relatifs
eller vers une url avec un if[C#] Datagrid et variable Time (Mysql)
[FO] vers PDF:recopier le titre d'une table divisé sur plusieurs pagesflash : bouton avec vers page php
[vb.net]voir une variable dans une classe classeProblème input type='hidden'
[delphi]Retour de fonction - Type incompatiblecomment mettre en forme un array ? [reglé]
[C] -pedantic et affectation entre pointeur de fonction et "void *"Taille d'une variable
Plus de sujets relatifs à : Pointeur vers une variable (record) de type : array of array of ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR