begin process at 2012 02 10 20:12:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Héritage multiple et destructeur ==> Erreur de segmentation ??


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

Héritage multiple et destructeur ==> Erreur de segmentation ??

mercredi 20 août 2008 à 15:03:23 | Héritage multiple et destructeur ==> Erreur de segmentation ??

Rouliann

Membre Club
Bonjour à tous.

Voilà, j'ai une classe abstraite A :

class A{
    private:
        string m_name;
    public:
        A() {m_name = "default_name";}
        virtual ~A() {}
        virtual void print() = 0;
} ;

et une classe template dérivée de A et de list :

template< typename T >
class B : public A, public list<T> {
    public:
        B() : A() {}
        ~B() {}
} ;

Et dans mon main :

main()
{
    A *a = new B<int>[100];
    delete[] a;
}

Le delete[] me donne une erreur de segmentation...
Notez que si je fais

A *a new B<int>;
delete a;

tout marche bien.
D'où peut venir le problème ?

PS: désolé pour le gras j'ai pas réussi à l'enlever...
mercredi 20 août 2008 à 17:07:01 | Re : Héritage multiple et destructeur ==> Erreur de segmentation ??

juju12

Une fois la fonction print définie pour la classe B, j'ai pu exécuter sans problème.

mercredi 20 août 2008 à 18:36:26 | Re : Héritage multiple et destructeur ==> Erreur de segmentation ??

Lucky92

Idem pour moi. D'ailleurs sur mon compilateur ( VS2005 ), ton code ne compile pas si print() n'est pas défini. Quel compilateur utilises-tu ?
jeudi 21 août 2008 à 10:34:14 | Re : Héritage multiple et destructeur ==> Erreur de segmentation ??

zaibacker

Les méthodes virtuelles doivent être impérativement définies dans les classes dérivées ou je me trompe?
jeudi 21 août 2008 à 16:07:18 | Re : Héritage multiple et destructeur ==> Erreur de segmentation ??

juju12

zaibacker : ce sont les fonctions virtuelles PURES qui doivent obligatoirement être implémentées, et même tu n'es pas obligé du moment que ta classe dérivée est une classe abstraite aussi.
Mais bon en effet dans la majorité des cas...

jeudi 21 août 2008 à 22:05:39 | Re : Héritage multiple et destructeur ==> Erreur de segmentation ??

Rouliann

Membre Club
Ah oui, j'ai oublié de le dire dans le post, mais dans mon code print() est bien définie dans B.

J'utilise g++ (4.1.2).

Pas d'autres idées ? :-)


jeudi 21 août 2008 à 22:21:42 | Re : Héritage multiple et destructeur ==> Erreur de segmentation ??

Rouliann

Membre Club

Quand je remplace, dans le main :

propertyBase *a = new property<int>[100] ;

par

property<int> *a = new property<int>[100] ;

Ca fonctionne...
Peut-être un problème au niveau des destructeurs virtuels, c'est la première fois que je m'en sers, mais j'ai rien trouvé de très précis ni avec Google, ni dans mes 2 bouquins de 500 pages :/

jeudi 21 août 2008 à 23:34:48 | Re : Héritage multiple et destructeur ==> Erreur de segmentation ??

Rouliann

Membre Club
Et quand je supprime la dérivation par list (ie B ne dérive que de A) ca fonctionne aussi.
Ce serait l'appel au destructeur de list qui poserait problème ? Oô

Là je rame... D'autant plus que le code fonctionne chez vous ^_^
vendredi 22 août 2008 à 12:20:24 | Re : Héritage multiple et destructeur ==> Erreur de segmentation ??

Rouliann

Membre Club
Réponse acceptée !
Ca y est j'ai trouvé !!

En fait il fallait faire un cast (statique ou dynamique) pour le delete[] :

int main()
{
    A *a = new B<int>[100] ;
    delete[] static_cast< B<int>* > (a) ;
    // OU delete[] dynamic_cast< B<int>* > (a) ;
    return 0;
}

Mais bon c'est pas très pratique étant donné qu'il faut connaitre le type pour pouvoir le faire...

Si quelqu'un a d'autres suggestions qu'il n'hésite pas!

vendredi 22 août 2008 à 12:29:37 | Re : Héritage multiple et destructeur ==> Erreur de segmentation ??

juju12

Normalement le fait de déclarer le destructeur virtual permet d'éviter cela puisque justement le bon destructeur sera appelé.


1 2

Cette discussion est classée dans : public, erreur, name, segmentation, delete


Répondre à ce message

Sujets en rapport avec ce message

error LNK2019 [ par djidana45 ] Bonjour tout le monde, je voulais savoir si qqu'un savait qq chose sur sur l'erreur : error LNK2019A la compilation, j'ai le message d'erreur suivant Erreur de segmentation... Qu'est ce que c'est ??? :o [ par Rouliann ] Salut tout le monde j'ai un gros problème et malgré tous mes essais je n'arrive pas à le résoudre... Il n'y a pas d'erreurs à la compilation mais lors Delete [ par dido33 ] Bonjour, voila je voudrai supprimer pour de bon un fichier sur mon disque dur.J'ain une Tdirectorylistbox qui m'indique le chemin et quand j'ai trouve socket winsock grrr [ par dekai ] Voilà mon pb lorsque je tente un send ou recv j'obtient une erreur et ej comprends pas pourquoi. Merci de m'aider.Voici le code (je travaille sous dev Une erreur de segmentation que je ne comprends pas... [ par semifer ] Voilà, je débute en C, j'ai quelques connaissances dans d'autres langages (surtout php et scripts bash). Je tourne sous plateforme Linux Debian 3.1 e Rational Purify et le delete [ ] dans un vector [ par fuliculi ] Bonjour à tous,j'utilise purify depuis 2 ans et il m'aide beaucoup (en particulier pour les plantages à première vue sans raison). Il y a une erreur q Erreur sur delete[] et pb alocation mémoire [ par dan34 ] 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 Erreur de segmentation [ par Snacksou ] Bonjour à tous, je suis étudiant en informatique, et j'ai un algorithme à écrire. J'ai voulu le mettre en c pour le vérifier mais j'ai une erreur de s Erreur de segmentation [ par freekid ] Bonjour tout le monde,voila je suis débutant en programmation c++.Et ma joie s'est arrété lorsqu'une erreur impossible(pour moi) à enlever est apparue erreur de segmentation :'( [ par by_rabbit_08 ] Bien le bonjour...Je suis désolé, si je dérange, j'ai déjà embêter pas mal de monde avec mon problème, et dans un élan de trop grand entousiasme, j'ai


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 : 0,437 sec (4)

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