Article View: gnu.g++.bug
Article #1899operator delete()
From: James Clark
Date: Mon, 24 Apr 1989 11:28
Date: Mon, 24 Apr 1989 11:28
76 lines
1857 bytes
1857 bytes
There's a bug in version 1.34.2 g++'s handling of the member version
of operator delete. This can lead to operator delete getting called
twice for the same object.
Script started on Mon Apr 24 11:55:22 1989
jclark% cat bug.c
#include <stdio.h>
struct A {
void *operator new(long);
void operator delete(void *);
virtual ~A();
};
struct B : A {
~B();
};
struct C : B {
~C();
};
void *A::operator new(long n)
{
fprintf(stderr, "A::operator new(%d)\n", n);
return new char[n];
}
void A::operator delete(void *p)
{
fprintf(stderr, "A::operator delete(%d)\n", p);
}
A::~A()
{
fprintf(stderr, "A::~A()\n");
}
B::~B()
{
fprintf(stderr, "B::~B()\n");
}
C::~C()
{
fprintf(stderr, "C::~C()\n");
}
main()
{
A *p = new C;
delete p;
}
jclark% ./g++ -g -v -B./ bug.c
g++ version 1.34.2
/usr/local/lib/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ bug.c /tmp/cca25922.cpp
GNU CPP version 1.34
./c++ /tmp/cca25922.cpp -quiet -dumpbase bug.c -g -version -o /tmp/cca25922.s
GNU C++ version 1.34.2 (sparc) compiled by GNU C version 1.34.
as /tmp/cca25922.s -o bug.o
./ld++ -C -C ./crt0+.o bug.o -lg++ /usr/local/lib/gcc-gnulib -lg -lc
jclark% a.out
A::operator new(4)
C::~C()
B::~B()
A::~A()
A::operator delete(43056)
A::operator delete(43056)
jclark% exit
jclark%
script done on Mon Apr 24 11:55:55 1989
James Clark
jjc@jclark.uucp
Technical Details
Message-ID:
<8904241128.AA25942@jclark.uucp>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!UUNET.UU.NET!jclark!jjcShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!UUNET.UU.NET!jclark!jjc From: jclark!jjc@UUNET.UU.NET (James Clark) Newsgroups: gnu.g++.bug Subject: operator delete() Message-ID: <8904241128.AA25942@jclark.uucp> Date: 24 Apr 89 11:28:12 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 76