Thread View: gnu.g++.bug
1 messages
1 total messages
Started by James Clark
Mon, 24 Apr 1989 11:28
operator delete()
Author: 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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads