Erreur sur delete[] et pb alocation mémoire

Résolu
cs_dan34 Messages postés 28 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 13 mars 2012 - 29 déc. 2005 à 18:08
cs_dan34 Messages postés 28 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 13 mars 2012 - 29 déc. 2005 à 19:46
Salut,

J'ai un soucis avec le bout de code suivant.
En fait j'ai créé un objet qui contient un tableau de char dont j'alloue dynamiquement la taille en fonction des besoins et lorsque je veux libérer la mémoire ben ça me met une erreur comme quoi le pointeur est invalide et si j'enlève le delete ça fonctionne.
Mais je pense que je dois avoir des allocations mémoires qui ne sont plus pointés et cela risque à terme de me prendre toute la mémoire.

La question c'est est ce que je pense bien ?
Et si vous voyez une erreur dans mon code merci de me l'indiquer

// On créé un nouveau tableau servant de tampon
char *pMantisse =
new
char [(m_MantisseSize+1+m_MantisseSize/3)];

// On copie les valeurs de l'ancien tableau vers le nouveau
for (
int i = 0; i < m_NbrElmt; i++)
pMantisse[i] = m_pMantisse[i];

// On supprime le tableau dont on n'a plus besoin
delete[] m_pMantisse; // Ici sa plante
// On recrée le pointeur et on affecte le bon tableau a l'objet
char *m_pMantisse = pMantisse;

4 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 déc. 2005 à 19:35
char *m_pMantisse = pMantisse;

remplace cela par m_pMantisse = pMantisse;

Car sinon le prochaine coup, m_pMantisse ne sera pas bon.
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 déc. 2005 à 18:17
m_pMantisse a été alloué comment?

char *m_pMantisse = pMantisse; // tu crée ici une variable locale m_pMantisse, qui va masquer l'autre

Mais oui tu as raison, il faut absolument toujours tout libérer
0
cs_dan34 Messages postés 28 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 13 mars 2012
29 déc. 2005 à 19:14
la variable m_pMantisse est un pointeur de char et elle a été allouée précédemnent lors de la construction de l'objet par un new.

C'est bien ce que je pensais pour l'alocation mémoire mais j'étais pas sur que le truc ne se débrouille pas tout seul.
0
cs_dan34 Messages postés 28 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 13 mars 2012
29 déc. 2005 à 19:46
Oui c'est cela qui pose problème en fait

Merci pour l'aide
0
Rejoignez-nous