When an array of derived objects is deleted through its base class, the
resulting program seg faults. Could this be caused by destructor iteration with
invalid <this> pointers?
Reproduced on gcc (GCC) 3.3.3 (cygwin special), egcs-2.91.66 (red hat 6.2), g++
(GCC) 3.3 20030304 (Apple Computer, Inc. build 1495), etc
Keylines in the reproducible case below:
Component* c = new Component1[2];
delete [] c;
Reproducible case:
extern "C" int printf(const char *, ...);
class Component{
public:
Component();
virtual ~Component();
};
Component::Component() { /*printf("Component::Component 0x%x\n",this);*/}
Component::~Component() { /*printf("Component::~Component 0x%x\n",this); */}
class Component1 : public Component {
private:
char bytes1[12];
public:
Component1();
virtual ~Component1();
};
Component1::Component1() { /*printf("Component1::Component1 0x%x\n",this);*/}
Component1::~Component1() { /*printf("Component1::~Component1 0x%x\n",this);*/ }
int main()
{
Component* c = new Component1[2];
delete [] c;
return 0;
}
--
Summary: Array delete'd through base class causes access
violation in prog
Product: gcc
Version: 3.3.3
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: jorik dot dewit at gmail dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC host triplet: i686-pc-cygwin i686-pc-linux ppc-mac-osx
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23132