Attention aux yeux !!! Pb d'adressage !!!

billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 - 9 avril 2004 à 18:00
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 9 avril 2004 à 20:48
Voila g créé trois types :

type t_point=object
coord_x : GLfloat;
coord_y : GLfloat;
coord_z : GLfloat;
end;

type t_face=object
coord_x : GLfloat;
coord_y : GLfloat;
coord_z : GLfloat;
end;

type dessin_3D=object
numero : integer;
nombre_points : integer;
nombre_faces : integer;
points : array of t_point;
faces : array of t_face;

puis, je definit une variable:

cube : dessin_3D

et je chercher a placer une valeur dans coord_x, j'essaie :

cube.points[0].coord_x := 0.1 ;

Et delphi me sort une erreur d'adressage , (de violation de je c pas quoi !!!)

Alors j'ai peut etre une erreur, ou peut etre que je dois definir de l'espace pour ecrire dedans ( je connais le nombre de points mais je c pas alloué de l'espace pour mes tableaux).

Si quelqu'un s'y connait, je veux bien,

Merci beaucoup.

Billou_13

4 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
9 avril 2004 à 18:57
L'utilisation du mot clé Object est à déconseiller. Elle n'est maintenue que pour des raisons de compatibilité ascendante. A partir de Delphi 8, ce mot clé n'est plus reconnu.

Je pense que, en fait, tu veux utiliser des record. Remplace Object par Record et tout devrait rentrer dans l'ordre.

Pour info, Object avait à peu près le même rôle sous Turbo Pascal que le mot Class sous Delphi.
Tu comprends mieux que, ne créant pas d'objet avant de l'utiliser, Delphi déclenche une exception du type EAccessViolation (zone mémoire non réservée, pointeur non initialisé).
May Delphi be with you
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
9 avril 2004 à 19:39
Merci beaucoup , je v essayer !!!

Je voulais juste savoir vu que tu as répondu a pas mal de mes questions (et je t'en remercie fortement) , quel est la différence entre une structure et un object ???

Et comment on appelle une structure sous delphi et un objet.

Je pense que l'on appelle un objet avec Record vu que tu me l'as fait remplacer, non ???
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
9 avril 2004 à 19:52
Apparement, ca ne marche pas meme qd je remplace les objets par des records !!!

Qd j'execute, Delphi me dit :

" le projet a provoque une classe d'exception. EAccessViolation avec le message 'Violation d'accès à l'adresse 0044F28D dans le module'. Ecriture à l'adresse 0000000C'. Processus stoppé !!!

Voila , je comprend pas !
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
9 avril 2004 à 20:48
Je pensais que tu savais que tu devais dimensionner tes tableaux avant de les utiliser !
Donc, voici le code qui fonctionne :
type
  GLfloat = Double;

  t_point = record
    coord_x: GLfloat;
    coord_y: GLfloat;
    coord_z: GLfloat;
  end;

  t_face = record
    coord_x: GLfloat;
    coord_y: GLfloat;
    coord_z: GLfloat;
  end;

  dessin_3D = record
    numero: integer;
    nombre_points: integer;
    nombre_faces: integer;
    points: array of t_point;
    faces: array of t_face;
  end;


J'ai déclaré un alias de type GLfloat pour pouvoir vérifier que tout se passait bien, autant à la compilation qu'à l'exécution et te donner un code qui marche.

Ensuite, avant d'utiliser tes tableaux, tu dois les dimensionner
Exemple avec des tableaux de dix éléments chacun :
  SetLength(Cube.Points, 10);
  SetLength(Cube.Faces, 10);
  cube.points[0].coord_x := 0.1;


Cette fois devrait être la bonne ! :)

May Delphi be with you
0
Rejoignez-nous