begin process at 2012 05 28 05:07:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Access Violation sur Destructeur


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

Access Violation sur Destructeur

mardi 3 août 2004 à 16:35:54 | Access Violation sur Destructeur

Clonk

Bonjour,
j'utilise 4 classes : Champs et Contrainte contenus dans Catégorie, contenue dans Type (tout le monde suit?)

Pour gérer le contenant de chaque classe, j'ai utilisé des listes chainées (okd school, mais ça marche nikel)
je n'ai aucun problème à l'initialisation, mais au moment de la destruction, j'ia un problème au niveau de champ et de contrainte, j'ai un access violation dès que je veux supprimer une valeur d'une des instances. Voilà mes destructeurs:

Type::~Type()
{
cout<<"Lancement du destructeur de Type"<<_debutmasque<<endl;
delete[] _debutmasque;
delete[] _limit;
Lcategorie * ltete = _lcategorie;
Lcategorie * tmp = NULL;
while (ltete != NULL)
{
tmp = ltete->suivant;
ltete->_categorie.~Categorie();
ltete = tmp;
}
free(_lcategorie);
int i = 5;
}


Categorie::~Categorie()
{
cout<<"Lancement du destructeur de categorie "<<_masque<<endl;
delete[] _masque;
Lchamps * tetec = _lchamps;
Lchamps * tempc = NULL;
Lct * tetelct = _lct;
Lct * tempct = NULL;
while (tetec != NULL)
{
//if (tetec->suivant!=NULL)
tempc = tetec->suivant;
tetec->_champ.~Champ();
tetec = tempc;
}
while (tetelct != NULL)
{
//if (tetelct->suivant != NULL)
tempct = tetelct->suivant;
tetelct->ct.~Contrainte();
tetelct = tempct;
}
};

Champ::~Champ()
{
cout<<"Lancement du destructeur de Champ "<<_nomchamp<<endl;
delete[] _nomchamp;
delete[] _type;
delete[] _format;
delete[] _separator;
delete[] _explication;
}

Contrainte::~Contrainte()
{
cout<<"Lancement du destructeur de contrainte "<<Ct<<endl;
delete[]Ct;
delete[]_explication;
}


Je vous préviens, je n'ai aucun destructeur qui se lance PENDANT le traitement, uniquement à la fin de mon main.

Merci ;)
mardi 3 août 2004 à 19:16:59 | Re : Access Violation sur Destructeur

djl

probleme de logique et de comprehension, depuis quand on appel explicitement un destructeur ?

tu melange aussi free et delete (ou alors delete[]??)

essay d'avoir un code coherent et surtout revoi les bases de la poo
mardi 3 août 2004 à 19:56:15 | Re : Access Violation sur Destructeur

imanewin32

dans ~Type():si _debutmasque n'est pas un tableau d'elt c'est pas la peine de mettre[] la même chose pour _limit
et pour ltete tu doit allouer sinon il va pointé sur le même emplacement que _lcategorie(même valeur)
donc qd tu essaye de détruire ltete tu agit egalement sur _lcategorie

c'est une possiblité!!!!!
car ton code est un peu compliqué
sinon revoit ton code ligne par ligne ,et tu trouvera surement la reponse
Bonne chance
mercredi 4 août 2004 à 10:04:38 | Re : Access Violation sur Destructeur

Clonk

Bon, j'ai "un peu" revu mon code, surtout pour la relecture, mais j'ai toujours ce problème...
Je n'ai aucun problème au niveau des destructeurs de Type et Categorie, aucun non plus au niveau de mes listes chainées, c'est au niveau de la destruction de mes char * dans Champs et Contrainte.
djl : Oui, je mélangeais free et delete, je suis torp habitué à faire du C, et pas du C++, donc G mélangé.
Voilà, C ptete légèrement plus compréhensible:

Type::~Type()
{
delete[] _debutmasque;
delete[] _limit;
Lcategorie * ltete = _lcategorie;
Lcategorie * tmp = NULL;
while (ltete != NULL)
{
tmp = ltete->suivant;
delete ltete;
ltete = tmp;
}
}

Categorie::~Categorie()
{
delete[] _masque;
Lchamps * tetec = _lchamps;
Lchamps * tempc = NULL;
Lct * tetelct = _lct;
Lct * tempct = NULL;
while (tetec != NULL)
{
tempc = tetec->suivant;
delete tetec;
tetec = tempc;
}
while (tetelct != NULL)
{
tempct = tetelct->suivant;
delete tetelct;
tetelct = tempct;
}
}


Champ::~Champ()
{
delete[] _nomchamp;
delete[] _type;
delete[] _format;
delete[] _separator;
delete[] _explication;
}

Contrainte::~Contrainte()
{
delete[]Ct;
delete[]_explication;
}


Note : tous mes "delete[]" sont sur des char* que j'ai alloué en new char [val].

Et ça ne me fait un access violation UNIQUEMENT sur les char* dans Champs et Contrainte.

Je capte toujours pas!
mercredi 4 août 2004 à 10:26:00 | Re : Access Violation sur Destructeur

Clonk

Cbon, j'ai capté, CT meme pas dans les destructeurs, je n'avais pas sorrigé les constructeurs de ces classes, c'est tout...
Mais sinon, mes destructeurs, mal fait, certes, marchaient très bien ^_^
Meric du coup de main


Cette discussion est classée dans : champ, delete, contrainte, destructeur, tetelct


Répondre à ce message

Sujets en rapport avec ce message

champ de saisie [ par vinc ] Comment récupérer ligne par ligne dans un champ de saisie en Visual C++ ?vinc net use * /delete EN C++ [ par LeBobo ] Salut. J'ai un petit programme qui utilise la fonction : system(''net use * /delete'') ; Le problème est que mon programme à une interface graphique w accéder à un champ précis d'une table [ par Hub ] Voilà je débute un peu en base de données, et je dois accéder à un champ précis d'une table, avec c++ Builder, grâce aux pbjets ADO... Quelqu'un peut ecriture de champ de bits dans un fichier [ par obasileus ] Salut, est-ce que quelqu'un sait comment ecrire un champ de bits (9 bits) dans un fichier ?merci d'avance@+obasileus ecriture ds un fichier txt [ par Leparasite ] Bonjour , bon je suis nouveau dans la programation , alors j'essai de faire des petit truc assez simple pour commencer et là j'ai un petit prob .bon j Est-ce la meilleure méthode ? [ par jeromedeparis13 ] Bonjour,J'utilise Visual C++ et Access 97 pour une application . J'ai besoin de me connecter à la BD (Access 97 qui compte une dizaine de tables) afin ajout de valeur dans champ access [ par theflucke ] je dois en c++ inserer des donnes dans une dbgrid qui est liee a une table access... le probleme est que soit disant jen suis pas en mode editionj'ai Activer/Désactiver champ de saisie [ par CHENRY ] En VC++ 6 avec les MFC, comment faire pour activer désactiver dynamiquement un champ de saisie.Cette option existe dans les propirétes lorsqu'on créé Touches de fonctions [ par CHENRY ] En VC++6.0 avec les MFC, je souhaite employer les touches de fonction( F1 à F8) .Le but est:Dans un ecran de saisie, quand l'user est sur un champ de New et Delete [ par Tyroflan ] juste une questionsi j'ai ceci : int *p1;...main(){int pipi;cin >> pipi;p1 = new int [pipi];...delete[pipi] p1; ou bien delete[] p1;}MAISje procède


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 2,933 sec (3)

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