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 :
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
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;
Effectivement, la structure est bien crée et j'y ai accès sans problèmes.
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);
Un peu plus loin, je veux créer plusieurs instances dans le corps d'une boucle, j'utilise donc le code suivant :
Et le hic se situe ici.
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);
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
Partager