Bonjour à tous,

Question bête aujourd'hui, je suis confronté à des problèmes de gestion de mémoire assez opaques pour moi que j'essaie de résoudre comme je peux... Du coup je reviens vers ce forum qui m'a déjà bien aidé pour mon algo du moment.

Donc, pour passer d'une référence à un pointeur et vice-versa, je voudrais juste confirmation (ou non) qu'on peut sans problèmes subtils écrire ça svp :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
Objet* p = new Objet();
Objet& r = *p; // pointeur => référence
Objet* p2 = &r; // référence => pointeur
delete p2;
Merci d'avance

PS : en fait j'ai notamment cette fonction qui semble poser souci, en effet j'ai bien l'impression que j'ai des nœuds qui disparaissent mystérieusement dans mon programme à cause d'elle :

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
 
Noeud& Noeud::insererNouveauNoeud(unsigned int posFilsAScinder, unsigned int nbCaracteresARetrancher) // scinde une arête du noeud courant en deux, en y insérant un nouveau noeud après le nombre de caractères indiqué (adapté pour ukkonen)
{
    Noeud& filsAScinder = *fils[posFilsAScinder]; // référence vers le fils dont on va scinder l'arête
    unsigned int indexDebutFils = filsAScinder.getIndexDebut(); // on récupère son index de début
    filsAScinder.setIndexDebut(indexDebutFils + nbCaracteresARetrancher); // on met à jour le début de l'ancien fils en conséquence
    Noeud* pnouveau = new Noeud(indexDebutFils, indexDebutFils + nbCaracteresARetrancher - 1, 0); // on crée un nouveau noeud avec cet index de début et l'index de fin au bon endroit
 
    pnouveau->nouveauFils(&filsAScinder);
    setFils(pnouveau, posFilsAScinder);
 
    return *fils[posFilsAScinder];
}
 
void Noeud::setFils(Noeud* n, unsigned int index)
{
    fils[index] = n; // c'est un vector de pointeurs vers des Noeud
    fils[index]->pere = this;
}
 
unsigned int Noeud::nouveauFils(Noeud* n)
{
    n->pere = this;
    fils.push_back(n);
    return fils.size() - 1;
}