Stack OverFlow ou Violation d'adresse - Orienté Objet
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:
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:
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:
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