Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème avec delete [ Divers / Débutant(e) ] (juju12)

vendredi 19 mai 2006 à 11:29:17 | Problème avec delete

juju12

Bonjour;
   L'extrait de code suivant(simplifié bien sûr) me cause problème :

class Class1
{
};

int main(void)
{
 Class1 n=*(new Class1);
 delete &n;
 return 0;
}

La compilation est OK par contre l'exécution (en debug) me renvoie :
"Debug Assertion Failed [...] _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)"

Je ne comprend absolument pas...

Merci de votre aide;


vendredi 19 mai 2006 à 12:21:08 | Re : Problème avec delete

ymca2003

Class1* n = new Class1;
delete
n;

vendredi 19 mai 2006 à 12:26:00 | Re : Problème avec delete

vecchio56

Administrateur CodeS-SourceS
&n est une adresse sur la pile, c'est donc normal que le delete échoue En fait, n est une copie de l'objet créé sur le tas, tu ne peux donc pas lui appliquer delete

vendredi 19 mai 2006 à 12:27:29 | Re : Problème avec delete

bouba


 Class1 n=*(new Class1); // Ici tu déréférences, tu récupères "la valeur", l'opérateur = réalise donc une copie membre à membre mais tu perds la référence au pointeur retourné par new !!!
 
delete
&n; // Ici en fait cette instruction demande la désallocation de n, mais n n'est pas alloué dynamiquement, en sortant du main le prog essaira de désallouer une fois de plus n, en tout cas ce n'est nullement l'objet "new Class1" qui est pointé par &n !!!

Good Luck.

Bouba



vendredi 19 mai 2006 à 12:28:00 | Re : Problème avec delete

bouba

Oups, en même temps !!!

vendredi 19 mai 2006 à 12:58:16 | Re : Problème avec delete

juju12

Merci pour vos réponses, cela m'a aidé;
Mais j'ai toujours un problème avec delete [] :

class T
{
protected:
 int*Ptr;
public:
 T(){Ptr=new int[10];}
 ~T(){delete [] Ptr;}
};

int main(void)
{
 T a,b;
 a=b;
 return 0;
}

Cela me renvoie la même erreur que précédemment, au niveau de la ligne a=b (lorsque le prog libère l'ancienne ressource de a je suppose);


vendredi 19 mai 2006 à 13:05:14 | Re : Problème avec delete

bouba

Réponse acceptée !
Oui, c'est normal, l'opérateur = effectue une copie membre à membre, a la première ligne
T a, b;
tu créer 2 objets de type T avec chacun un pointeur sur un tableau de 10 éléments que tu a alloué dans le constructeur.
Mais ensuite quand tu faits a=b, dans ton objet a tu perde le pointeur vers le tableau alloué à la construction de a puisque maintenant tu as dans a un poiteur vers le tableau de b (puisque égal fait une copie membre à membre).
A la fin du main delete[] est donc appelé deux fois sur le même pointeur et le tableau initiale de l'objet à n'est pas détruit car tu a perdu le pointeur sur celui-ci.
Solution: surcharger l'opérateur = pour que les éléments du tableau soient copié de b vers a est non les pointeurs.

Bonne chance, n'hésites pas à demander précisions si t'as un blem.
Bouba



vendredi 19 mai 2006 à 13:08:47 | Re : Problème avec delete

Zootella

a=b;

Si tu as des pointeurs dans la classe T, alors juste leurs valeurs est copiés.
Fais une fonction Copy, qui va copier sur quoi pointe le pointeur Ptr.

vendredi 19 mai 2006 à 13:11:10 | Re : Problème avec delete

juju12

Zootella-> je sais, c'était juste pour l'exemple (merci tout de même);
bouba-> merci pour tes réponses ça devrait aller maintenant...




Cette discussion est classé dans : problème, debug, delete, class1


Répondre à ce message

Sujets en rapport avec ce message

Problème de compilation [ par lbs ] Bonsoir,J'ai téléchargé les sources d'eMule (version officielle et version lsd). Je compile le tout et ca me met le message d'erreur suivant :------ D Problème de delete [ par ManTico ] Salut à tous, j'ai un peu de peine avec la gestion de la mémoire et je voulais savoir deux choses :- pourquoi en mode Debug mon prog plante sur les de Problème avec delete [ par bibiteinfo ] Bonjour, je suis en train de faire un chat.  Je lance mon serveur si je connecte un client, j'ai cette ligne là qui se fait appeler :m_nomJoueur = CIn Prob grave avec Visual... [ par Nuage ] Voila, j'ai un grave problème avec le debug de Visual. Je fait un bête code source, avec une fonction pour créer un élement d'une pile, et une fonctio Problème avec delete[] [ par gbourgeois0019 ] SalutJ'ai un petit problème. voici le code :char* Temp = new char[100];char* Title = new char[100];strcpy(Temp,"Exemple");Title = Temp + 1 ;delete[] T Problème de Debug et d'Execution(Compilation) [ par Maiku ] SalutJe veux faire une Bibliothèque de Classe C++ sous Visual Studio.Net.J'ai donc Fait New Project / Class LibraryJe Commence mon projet mais quand j TcpClient Debug -- No connection [ par pasteque ] Salut, Mon application dispose d'un TcpClient de base : TcpClient* myTcpClient = new TcpClient("localhost",1200); Dans le debuggueur (en pas à pas), Visual C++ sous vista [problème de debug] [ par bouks69 ] bonjour,voila je viens de passer hier sous vista, afin de tester les divers outils de mon entreprise (vérifier le bon fonctionnement, etc...) et me su Problème d'utilisation d'une static library, erreur LNK1276 [ par Servlax ] Bonjour, je poste dans la partie "Divers / Débutant(s)" à défaut d'en avoir trouvé une plus adéquate. Excusez-moi par avance si je me trompe d'endroit Débute - problème de build [ par mstarsup5 ] Bonjour à tous,Je débute en C++, j'essaie d'apprendre les rudiments pour l'instant. J'ai quelques notions en C cela dit.Alors mon problème c'est que d


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,920 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.