Catching memory errors

Bala B K bkbsub@gmail.com
Sun May 22 02:06:00 GMT 2005


Hi,

Recently I experienced a very strange behaviour with C++ (g++ 4.0.0,
g++ 3.4.1 and g++ 3.3.3) when I made a mistake and deleted a pointer
twice. Here is what I did:

class B {
// class definition.
};

class A {
        B* b1;
        B* b2;

        A (const A& a) { // copy constructor (DEEP COPY) };
        // Some get and set methods for b1, b2
        void setb1(const B* b) {
                if ( b1 )
                        delete b1;
                b1 = b;
        }
        ...
        ...
};

void myfunc(A* a) {
        B* b = a->getb1();
        delete b;
        b = NULL;
        B* c = new B();
        a->setb1(c);
}

A* a = new A();
myfunc(a);



Now, after the call to myfunc(), if I did this:

A* a1 = new A( *a ); // Call the copy constructor


Then the pointers b1 and b2 inside a1 point to the SAME memory location! 

The program worked as expected when compiled with the xlC
compiler and gave seg faults when compiled with g++ (3.4.1 and 4.0.0).
It is good that when I compile it with g++ I get an error (so that I
fix the buggy code), but it would be nice if g++ could catch it during
run time.

Thanks
Bala



More information about the Gcc-help mailing list