Getting the size of the object void* is pointing to

c++, sizeof, void-pointers

Solution

Applying `delete` to a `void *` pointer in C++ is illegal.

If your compiler supports this as a non-standard extension, then most likely `delete` assumes that the unknown object pointed by that pointer has trivial destructor. In that case `delete` does not have to do anything besides immediately handing over the control to the raw-memory deallocation function `::operator delete`, which probably just calls `free`. (This last bit, of course, can depend on the implementation).

So, your question basically boils down to "how to determine the size of `malloc`-ed memory block". There's no standard features that can do that. Either memorize the size yourself, when you allocate it. Or use the non-standard implementation-specific library features, if any such features are provided by your platform.

In some implementations this can be done through `msize` function. But again, in order to do it meaningfully, you'd have to research your implementation first. You need to figure out how the memory is allocated by `new` and/or what exactly `delete v1` does, since it is not standard C++.

Problem

``` #define BOOST_TEST_MODULE MemoryLeakTest #include <boost/test/unit_test.hpp> #include <iostream> using namespace std; BOOST_AUTO_TEST_CASE( MemoryLeakTest) { double* n1 = new double(100); void* v1 = n1; cout << sizeof(v1) << endl; delete v1; } ``` This code will work perfectly fine without any error leaks. But I would like to be able to get the size of the object `void*` is holding on to.I would imagine there is a way because the delete statement knew how large the object v1 was pointing to so that it can delete it so it must be stored some where.

Original source

Related problems