🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by James Clark Mon, 24 Apr 1989 11:28
operator delete()
#1899
Author: James Clark
Date: Mon, 24 Apr 1989 11:28
76 lines
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