|
Retourner un tableau d'objets dynamique |
Iniciado por no, 10,ago. 2004 06:10 - 1 respuesta |
| |
| | | |
|
| |
Publicado el 10,agosto 2004 - 06:10 |
Bonjour,
J'aimerai avoir des fonctions qui ne servent qu'à allouer dynamiquement des objets ; mais lorsqu'on revient de ces fonctions, l'objet est automatiquement libéré de la mémoire.
Voici les extraits de code:
---------------------------------------------
FleurCollection est une classe
fleurs est un tableau dynamique
FIN
--------------------------------------------------- Fleur est une classe
i est entier
FIN
PROCEDURE Constructeur(i est entier) :i = i ---------------------------------------------------- PROCEDURE creerFleurs()
fc est une FleurCollection mesFleurs est un tableau dynamique de 10 Fleur dynamique i est un entier
POUR i=1 A 10 mesFleurs[i] = allouer une Fleur(i) FIN
fc:fleurs = mesFleurs
RENVOYER fc
----------------------------- PROCEDURE init()
roses est une FleurCollection dynamique roses = creerFleurs()
-------------------------------- Le programme démarre init(), alloue correctement la mémoire, mais le destructeur de fleurCollection est appelé juste après "RENVOYER fc", donc il semblerait qu'on retourne fc et après on le libère. Résultat: je ne peux plus utiliser la variable "roses" puisque je reçois le message: "Erreur à la ligne 16 du traitement Procédure globale init. L'objet dynamique roses a déjà été libéré."
J'ai Windev8 version 01-80310g.
Merci pour votre aide,
Sébastien |
| |
| |
| | | |
|
| | |
| |
Publicado el 10,agosto 2004 - 18:06 |
Il est normal que fc soit détruit avant RENVOYER fc. Tu as déclaré FC de manière statique, la variable n'existera donc que dans la fonction. Techniquement je pense que roses reçoit bien un tableau mais non alloué. Change fc en FleurCollection dynamique, alloue-le et renvoie-le. Tant qu'il existera une référence vers ce tableau, il ne sera pas libéré implicitement.
"Sébastien" <no@spam.com> wrote:
Bonjour,
J'aimerai avoir des fonctions qui ne servent qu'à allouer dynamiquement
des
objets ; mais lorsqu'on revient de ces fonctions, l'objet est automatiquement libéré de la mémoire.
Voici les extraits de code:
---------------------------------------------
FleurCollection est une classe
fleurs est un tableau dynamique
FIN
--------------------------------------------------- Fleur est une classe
i est entier
FIN
PROCEDURE Constructeur(i est entier) :i = i ---------------------------------------------------- PROCEDURE creerFleurs()
fc est une FleurCollection mesFleurs est un tableau dynamique de 10 Fleur dynamique i est un entier
POUR i=1 A 10 mesFleurs[i] = allouer une Fleur(i) FIN
fc:fleurs = mesFleurs
RENVOYER fc
----------------------------- PROCEDURE init()
roses est une FleurCollection dynamique roses = creerFleurs()
-------------------------------- Le programme démarre init(), alloue correctement la mémoire, mais le destructeur de fleurCollection est appelé juste après "RENVOYER fc", donc il semblerait qu'on retourne fc et après on le libère. Résultat: je ne peux plus utiliser la variable "roses" puisque je reçois le message: "Erreur à la ligne 16 du traitement Procédure globale init. L'objet dynamique roses a déjà été libéré."
J'ai Windev8 version 01-80310g.
Merci pour votre aide,
Sébastien
|
| |
| |
| | | |
|
| | | | |
| | |
|