Bonsoir,
Je poste ici en dernier recours, ne me sortant pas d'une situation pour le moins étrange.
Je programme en Orienté Objet très basique avec deux classes simples :
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
 
TC_Individu = class(Tobject)
// Classe de définition d'un individu
 
public
   cout : real ; // cout de la solution
   proba_selection : real ; // probabilité qu'a l'individu de se reproduire
   indice_reproduction : real ; //indice de reproduction
   tab_genes : Array of integer ;
 
   constructor create(nb_genes:integer);
   // méthode de création de l'individu
   procedure print;
   // affiche les gènes de l'individu
end;
 
TC_Pop=class(Tobject)
// Classe de définition d'une population
 
public
   Indivs : Array of TC_Individu; //ensemble d'individus
 
   constructor create(nb_indivs:integer);
   // méthode de création de la population
   procedure print;
   // affiche les données de la population
   procedure liberation;
   //libération des pointeurs
   procedure calcul_proba_select;
   //Calcule la proba de sélection de l'individu
end;
Dans le corps du programme, je crée une première instance de la classe TC_Pop avec le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Tab_pop[0] := TC_pop.Create(nb_individus);
Tab_pop[0].Indivs[i] := TC_individu.create(nbsites);
Effectivement, la structure est bien crée et j'y ai accès sans problèmes.

Un peu plus loin, je veux créer plusieurs instances dans le corps d'une boucle, j'utilise donc le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
if i1=0  //Si l'élément courant est le premier individu de sa génération
      then //alors il faut initialiser la génération
      Tab_pop[i+1]:=TC_pop.create(nb_individus);
 
//Création et initialisation des individus
Tab_pop[i+1].Indivs[i1]:=TC_individu.create(nbsites);
Et le hic se situe ici.
Le code est pourtant le même, le if passe sans problème. Au pas à pas, j'observe que l'instance de classe TC_pop est bien crée (j'ai un tableau dimensionné, vide). Par contre, lors de la création de l'instance de la classe TC_individu, tout se passe comme si la classe TC_pop n'existait pas et une erreur est retournée.
En fonction des cas l'erreur est souvent un Stack Overflow, et parfois une Violation d'adresse...

J'ai beau retourner le problème dans tous les sens, je ne parviens pas à trouver ce qui cloche.

Je sais que trouver une solution avec si peu d'éléments est difficile, mais si qqun avait une idée géniale (ou pas d'ailleurs), ce serait sympa.

D'avance merci
Jake