S
S S
Hi
What can be the situations when delete does not call destructor? I
have overloaded operator delete.
class A{
public:
....new is also overloaded
....
void operator delete(void* p, size_t n) {deallocate(p, n);}
...
...
~A() {}
};
When I call
delete A;
It gives error,
*** glibc detected *** free(): invalid pointer: 0x00000003ffff01480
It gives below stack trace,
#0 0x000000328d42e25d in raise () from /lib64/tls/libc.so.6
#1 0x000000328d42fa5e in abort () from /lib64/tls/libc.so.6
#2 0x000000328d4635e1 in __libc_message () from /lib64/tls/libc.so.6
#3 0x000000328d4691ee in _int_free () from /lib64/tls/libc.so.6
#4 0x000000328d469586 in free () from /lib64/tls/libc.so.6
#5 0x0000002a9bf9ff3e in operator delete () from /usr/lib64/libstdc+
+.so.5
I think delete do not take me to my deallocation routine and try to
free the memory itself which of course do not exist. Memory exist is
my own created heap which must be deallocated (effectively my
deallocation routine should be called)
Besides setting breakpoint in destructor does not reach there. I think
delete must always call destructor?
Thanks
What can be the situations when delete does not call destructor? I
have overloaded operator delete.
class A{
public:
....new is also overloaded
....
void operator delete(void* p, size_t n) {deallocate(p, n);}
...
...
~A() {}
};
When I call
delete A;
It gives error,
*** glibc detected *** free(): invalid pointer: 0x00000003ffff01480
It gives below stack trace,
#0 0x000000328d42e25d in raise () from /lib64/tls/libc.so.6
#1 0x000000328d42fa5e in abort () from /lib64/tls/libc.so.6
#2 0x000000328d4635e1 in __libc_message () from /lib64/tls/libc.so.6
#3 0x000000328d4691ee in _int_free () from /lib64/tls/libc.so.6
#4 0x000000328d469586 in free () from /lib64/tls/libc.so.6
#5 0x0000002a9bf9ff3e in operator delete () from /usr/lib64/libstdc+
+.so.5
I think delete do not take me to my deallocation routine and try to
free the memory itself which of course do not exist. Memory exist is
my own created heap which must be deallocated (effectively my
deallocation routine should be called)
Besides setting breakpoint in destructor does not reach there. I think
delete must always call destructor?
Thanks