X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f From: Andris Pavenis To: djgpp AT delorie DOT com Subject: Re: "delete" crash Date: Tue, 1 Jun 2004 16:40:02 +0300 User-Agent: KMail/1.6.2 References: In-Reply-To: Cc: tonytg13 AT yahoo DOT com (tony ganchev) MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <200406011640.02915.pavenis@latnet.lv> Reply-To: djgpp AT delorie DOT com On Tuesday 01 June 2004 15:43, Tony Ganchev wrote: > Guys, I have the following problem: > I have written a class, implementing dynamic linked list with > elements, containing strings. Unfortunately when I use the Remove > method of the GStringList class, my program crashes. I use DJGPP under > WinXP. I suppose the problem is some sort of segmentation although > there is nothing like SIGSEGV signal, the program just stops > execution. I have made sure that all of the elements are created using > "new". If anyone is eager to help me, here is the source > ... source removed ... At first some notes: 1) putting all stuff in a single source file would make testing simpler 2) DJGPP conio.h stuff is not related to the problem, so it's best to remove it. 3) Long comment lines gets split in e-mail client, as the result more time is needed than it should be. Compiled for Linux. valgrind-2.1.1 output included. It should give some hints for bugs. I don't want to mess with it more myself. Andris ==14758== Memcheck, a memory error detector for x86-linux. ==14758== Copyright (C) 2002-2004, and GNU GPL'd, by Julian Seward. ==14758== Using valgrind-2.1.1, a program supervision framework for x86-linux. ==14758== Copyright (C) 2000-2004, and GNU GPL'd, by Julian Seward. ==14758== For more details, rerun with: -v ==14758== ==14758== Invalid free() / delete / delete[] ==14758== at 0x3C01DAC9: operator delete[](void*) (vg_replace_malloc.c:131) ==14758== by 0x8048686: GString::Empty() (__string.h:71) ==14758== by 0x804869D: GString::operator=(char const*) (__string.h:86) ==14758== by 0x8049028: main (main.cc:18) ==14758== Address 0x3C251024 is 0 bytes inside a block of size 6 free'd ==14758== at 0x3C01DAC9: operator delete[](void*) (vg_replace_malloc.c:131) ==14758== by 0x8048686: GString::Empty() (__string.h:71) ==14758== by 0x8049210: GString::~GString() (__string.h:28) ==14758== by 0x8048CBF: GStringList::Add(GString const&) (__slist.h:135) ==14758== by 0x8049014: main (main.cc:17) ==14758== ==14758== Invalid free() / delete / delete[] ==14758== at 0x3C01DAC9: operator delete[](void*) (vg_replace_malloc.c:131) ==14758== by 0x8048686: GString::Empty() (__string.h:71) ==14758== by 0x804869D: GString::operator=(char const*) (__string.h:86) ==14758== by 0x8049051: main (main.cc:20) ==14758== Address 0x3C2510CC is 0 bytes inside a block of size 6 free'd ==14758== at 0x3C01DAC9: operator delete[](void*) (vg_replace_malloc.c:131) ==14758== by 0x8048686: GString::Empty() (__string.h:71) ==14758== by 0x8049210: GString::~GString() (__string.h:28) ==14758== by 0x8048DB3: GStringList::Insert(GString const&, unsigned long) (__slist.h:159) ==14758== by 0x804903D: main (main.cc:19) ==14758== ==14758== Invalid free() / delete / delete[] ==14758== at 0x3C01DAC9: operator delete[](void*) (vg_replace_malloc.c:131) ==14758== by 0x8048686: GString::Empty() (__string.h:71) ==14758== by 0x804869D: GString::operator=(char const*) (__string.h:86) ==14758== by 0x804907A: main (main.cc:22) ==14758== Address 0x3C251174 is 0 bytes inside a block of size 6 free'd ==14758== at 0x3C01DAC9: operator delete[](void*) (vg_replace_malloc.c:131) ==14758== by 0x8048686: GString::Empty() (__string.h:71) ==14758== by 0x8049210: GString::~GString() (__string.h:28) ==14758== by 0x8048DB3: GStringList::Insert(GString const&, unsigned long) (__slist.h:159) ==14758== by 0x8049066: main (main.cc:21) ==14758== ==14758== Invalid free() / delete / delete[] ==14758== at 0x3C01DAC9: operator delete[](void*) (vg_replace_malloc.c:131) ==14758== by 0x8048686: GString::Empty() (__string.h:71) ==14758== by 0x804869D: GString::operator=(char const*) (__string.h:86) ==14758== by 0x80490A3: main (main.cc:24) ==14758== Address 0x3C25121C is 0 bytes inside a block of size 6 free'd ==14758== at 0x3C01DAC9: operator delete[](void*) (vg_replace_malloc.c:131) ==14758== by 0x8048686: GString::Empty() (__string.h:71) ==14758== by 0x8049210: GString::~GString() (__string.h:28) ==14758== by 0x8048DB3: GStringList::Insert(GString const&, unsigned long) (__slist.h:159) ==14758== by 0x804908F: main (main.cc:23) ==14758== ==14758== Invalid free() / delete / delete[] ==14758== at 0x3C01DAC9: operator delete[](void*) (vg_replace_malloc.c:131) ==14758== by 0x8048686: GString::Empty() (__string.h:71) ==14758== by 0x8049210: GString::~GString() (__string.h:28) ==14758== by 0x8049190: main (main.cc:33) ==14758== Address 0x3C2512C4 is 0 bytes inside a block of size 6 free'd ==14758== at 0x3C01DAC9: operator delete[](void*) (vg_replace_malloc.c:131) ==14758== by 0x8048686: GString::Empty() (__string.h:71) ==14758== by 0x8049210: GString::~GString() (__string.h:28) ==14758== by 0x8048DB3: GStringList::Insert(GString const&, unsigned long) (__slist.h:159) ==14758== by 0x80490B8: main (main.cc:25) Requested 1 Requested 0 Requested 2 Requested 1 Requested 3 Requested 2 ------ ...... ;;;;;; ////// Requested 0 0: Line3 Requested 1 1: Line4 Requested 2 2: Line5 Requested 3 3: Line1 ==14758== ==14758== ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 17 from 1) ==14758== malloc/free: in use at exit: 56 bytes in 8 blocks. ==14758== malloc/free: 15 allocs, 12 frees, 100 bytes allocated. ==14758== For a detailed leak analysis, rerun with: --leak-check=yes ==14758== For counts of detected errors, rerun with: -v