12.08.10, 01:53, "Chris Morley" <[email protected]>:
> On 11/08/2010 17:47, Konstantin Tokarev wrote: > > > > > > 11.08.10, 20:37, "Noel O'Boyle": > > > >> Hi all, > >> > >> I am trying to track down a segfault on a SMI to CML conversion which > >> fails in the destructor of ~OBConversion at "delete pLineEndBuf". > >> > >> I am wondering whether this is related to the following in the copy > >> constructor OBConversion::OBConversion(const OBConversion& o): > >> > >> pLineEndBuf = o.pLineEndBuf; > >> > >> "p" indicates a pointer and I think that (in this case) it's either > >> NULL or else pointing to an object allocated with "new". > > > > It's not a good thing that two objects own one data pointer if it's not > clear which of them should free memory. > > Maybe you need to use > > > > *pLineEndBuf = *o.pLineEndBuf; > > > > (copy instead of share)? > > This bug has been, well, bugging me for some time, but I have not been > able to find why it is happening and have been living with the memory > leak. The normal way to protect against double deleting is to set the > pointer to NULL after deleting, but it does not help here. The problem > seems to be that the source pointer inside the pLineEndBuf's object is > feeefeee, meaning it has already been deleted (in the Visual Studio > debugger). > > Adding other pLineEndBuf=NULL; in other places also does not help. > I'm wondering about deletion being in a different DLL from the newing... Some minor remarks about this stuff: 1) there's no need for NULL identifier, in C++ usual form is pLineEndBuf=0 2) it's pointless to check if pointer is 0 before deletion, because deletion of 0 pointer is safe -- Regards, Konstantin ------------------------------------------------------------------------------ This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev _______________________________________________ OpenBabel-Devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openbabel-devel
