#include <iostream>
using namespace std;
class B
{
public:
B() { cout << "Base B()" << endl; }
~B() { cout << "Base ~B()" << endl; }
private:
int x;
};
class D : public B
{
public:
D() { cout << "Derived D()" << endl; }
virtual ~D() { cout << "Derived ~D()" << endl; }
};
int
main (void)
{
B* b = new D;
delete b;
}
---- output----------
Base B()
Derived D()
Base ~B()
*** glibc detected *** ./a.out: free(): invalid pointer: 0x0930500c ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7d41604]
/lib/tls/i686/cmov/libc.so.6(cfree+0x96)[0xb7d435b6]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb7f24231]
./a.out[0x8048948]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb7ce8775]
./a.out[0x80487c1]
Aborted
Si je supprimer le membre privé « int x » de la classe de base, il fonctionne très bienC++: morceau suivant d'accidents Code
Le problème est 'd' n'a pas de vtable. Donc, les pointeurs 'b' au début de 'd' et il ne devrait pas y avoir de problèmes. Je pense qu'il y a quelque chose de plus dans la mémoire (ajouté par le compilateur pour une raison quelconque) causant le crash. –