begin process at 2012 02 12 14:26:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Problème avec delete


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème avec delete

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ée 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...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,014 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales