Okay, but I asked because you might have accidentally overloaded the wrong pairs. Nevermind, I just hope, we don't have a long discussion here, before wrong overload finally points out to be the mistake.
Hm, are you really sure that the pointer wasn't allocated by your operator? Did you log pointers? Count invokations, do not only compare addresses.
I say that, because the implementation might change the exact pointer value from
delete[] ptr;
to
void operator delete[](void* mem);
– this means, ptr != mem. For example, for new[] and delete[], there can be additional space allocated before the actual array to hold the number of elements to destroy. Hence, the address may be offset.
What if you follow the code path with your debugger?