|
Trouver une ressource
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)
Informations & options pour cette discussion
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
|
&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
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version

LG KP501
Entre 9€ et 159€
|