The conditions are completely different when you run a program in debug as opposed to release. Some environments will auto-initialize variables in debug, or only inline code in release etc. It sounds like you were just dodging the bullet.
To fix the problem, you should zero-out the pointer after deleting the thing it points to avoid a dangling pointer (or use a RAII smart pointer). But again there really are few reasons to be using old style arrays in C++ these days. Even if you're using an older API, std vector provides access to it's contents. On Tue, Dec 28, 2010 at 5:35 PM, Paul Wellner Bou <[email protected]>wrote: > Hi again, > > I found the bug. I had two pointers to the same object, that's why the > constructor was called twice. So it is obvious that there is an error. > > But I expected the error much earlier -- when deleting the object behind > pointer for the second time. But it seems that in both ways, debugging > and running, the object is still in memory. While running, completely, > and, while debugging, only partly. > > Regars > Paul. > > On 12/28/2010 17:31, Paul Wellner Bou wrote: > > Hello, > > > > I experience a strange SIGSEGV debugging my Qt application: I only get > > the SIGSEGV while running the code with the "Debug" button. Running it > > with the "Run" button is fine. This is reproducable. I tried it a lot of > > times, recompiled in between, tried it then with the Qt Creator 2.1 RC > > 1, and so on. (Windows XP.) > > > > For debugging purposes I printed out the address of the (private) > > pointer (The SIGSEGV occurs in a destructor, where I try to delete my > > pointers allocated in the methods of the class during runtime): > > > > When running: 0x0 > > When debugging: 0xfeeefeee > > > > Furthermore, I commented out all the code doing something with this > > pointer. And the pointer is initialised with 0 in the constructor. Still > > the same error, although it should be 0 through the whole runtime. > > > > Beside the fact, that there is a bug in my code (the constructor is > > called twice and it shouldn't), This should not happen, correct? > > > > The only explanation I can imagine would be that somehow the destructor > > is called twice at almost the same time and as running is faster than > > debugging, the pointer is set to 0 before the second destructor tries to > > delete it. But even introducing a 0 check before deleting it, this > happens. > > > > > > // Ctor > > Triangles::Triangles() : p(0) > > { > > } > > > > // Destructor > > Triangles::~Triangles() > > { > > qDebug()<< this->p; > > if(this->p != 0) > > delete [] this->p; //<-- I get the SIGSEGV in this line > > } > > > > Regards > > Paul. > > _______________________________________________ > > Qt-creator mailing list > > [email protected] > > http://lists.qt.nokia.com/mailman/listinfo/qt-creator > _______________________________________________ > Qt-creator mailing list > [email protected] > http://lists.qt.nokia.com/mailman/listinfo/qt-creator >
_______________________________________________ Qt-creator mailing list [email protected] http://lists.qt.nokia.com/mailman/listinfo/qt-creator
