![]() |
Hi Philippe, I looked at you patch, i think there might be a better way of doing it. The cause of the problem is that in ths fxStackBuffer class there is no equals operator ( ie operator= ) function defined. The C++ compiler therefore drops back to doing a memberwise copy which is fine if copying regular numbers but breaks badly for pointers and dynamically allocated data. A defined operator= would catch other instances of code assigning one fxStackBuffer to another. I have included a patch below that does this - warning it needs testing!!! PS If you need a Stack today in new C++ code don't write your own, use the STL :-) - Robert *** StackBuffer.h.orig Sat Feb 14 21:47:49 1998 --- StackBuffer.h Mon Jul 27 11:04:21 1998 *************** *** 60,65 **** --- 60,66 ---- operator const unsigned char*() const;// Return base of buffer char& operator[](u_int i) const; // Return character in buffer char& operator[](int i) const; // Return character in buffer + fxStackBuffer& operator=(const fxStackBuffer&); protected: char buf[1000]; char* next; c StackBuffer.c++.orig StackBuffer.c++ *** StackBuffer.c++.orig Sat Feb 14 21:47:26 1998 --- StackBuffer.c++ Mon Jul 27 11:41:36 1998 *************** *** 117,119 **** --- 117,133 ---- vput(fmt, ap); va_end(ap); } + + fxStackBuffer& fxStackBuffer::operator=(const fxStackBuffer& other) + { + if (&other != this) { + u_int size = other.end - other.base; + u_int len = other.getLength(); + if (base != buf) free(base); + base = (size > sizeof(buf)) ? (char*) malloc(size) : &buf[0]; + end = base + size; + next = base + len; + memcpy(base, other.base, len); + } + return *this; + }