locked
Pointeurs croisés entre objets RRS feed

  • Question

  • Bonjour à tous,

    Je suis entrain de me casser la tête sur un problème que je n'arrive pas à résoudre et j'espère que la communauté va pouvoir m'aider parce que là, y'a mon chef qui commence à devenir tout rouge de colère :-(

    Voici ce qui m'arrive : j'ai une classe dont une des propriétés faire référence à un objet de cette même classe. Je me retrouve donc avec des références croisées : objetA.lien = objetB et objetB.lien = objetA
    Pour couronner le tout, chacun des ces objets se trouvent dans une collection : objetPrincipal.mesObjets contient objetA et objetB

    Quand je supprime "objetPrincipal", objetA et objetB sont toujours en mémoire parce qu'ils se référencent l'un l'autre. J'ai bien tenté de réécrire le destroy et le release mais rien n'y fait :-(

    Ce problème je le retrouve à divers endroits de mon application. Et depuis peu, de jolis C0000005 font leur apparition très très régulièrement et j'ai bien l'impression que cela vient du fait que des objets ne sont jamais supprimés de la mémoire.

    Une idée, un bout de code, une solution, du réconfort ? Je prend tout ce que vous voulez bien m'offrir :-)
    Merci par avance.
    vendredi 18 mai 2007 09:48

Toutes les réponses

  • Bonsoir Ludok

    la même question a été posté dans les news microsoft.public.fr.fox

    et j'ai répondu :

    Mon humble avis :
    - fixer à null la propriété Obj.lien de tes objets (ça ne va pas détruire ton objet reférent)
    - commencer par les derniers objets que tu as créé (dépiler ) pour que le gestionnaire de mémoire effecture un dépilement rapide et propre
    - enfin dans ton "objet principal" en méthode destroy(), tu dois pouvoir gérer la suppression des liens entre objet avant le dodefault()

    je ne sais pas si ma réponse été pertinente, car je n'ai pas eu de retour,

    mais si tu a un code source "exemple " a donner pour illustrer la question, ce serait plus facile de tester et de te répondre,

     

    Cordialement
    Francis

    mardi 22 mai 2007 19:56
  • Même question pour même demandeur ;-)
    En fait "Ludo" était déjà pris alors j'ai mis un ptit "K" à la fin pour passer en force :-)
    Merci Francis d'être si actif sur les forums et les newsgroup.

    Ludo(sans K ou avec, c'est au choix)
    mercredi 23 mai 2007 10:33
  • Ok ludo,

    merci pour tes compliments;

     

    ma réponse a t elle servi ?

      ou un exemple de code simplifiée pour d'aider ?

    cordialement

    Francis

    mercredi 23 mai 2007 18:18