determine pointer to point to array or single item during runtime

Y

yancheng.cheok

hello, may i know how i can determine whether a pointer is pointing to
an array or a single item during runtime?

this is because in certain situation, i need to determine whether to
use delete or delete[] to deallocate the item(s) ponting by the
pointer.

also, is there any way to determine whether the allocated memory
pointed by the pointer is allocated through new or c version calloc/
malloc?

thank you.
 
V

Victor Bazarov

hello, may i know how i can determine whether a pointer is pointing to
an array or a single item during runtime?

There is no portable way.
this is because in certain situation, i need to determine whether to
use delete or delete[] to deallocate the item(s) ponting by the
pointer.

If it's you who allocated it, you know how to delete it. If it's not
you who allocated it, you shouldn't be responsible for deletion.
also, is there any way to determine whether the allocated memory
pointed by the pointer is allocated through new or c version calloc/
malloc?

No, not portably. In most cases the developers decide to only use
one method. I say, use 'new' and don't concern youself with anything
else.

V
 
F

Frederick Gotham

posted:
hello, may i know how i can determine whether a pointer is pointing to
an array or a single item during runtime?


The language provides no such facility built-in.

You would have to keep track of it yourself.

this is because in certain situation, i need to determine whether to
use delete or delete[] to deallocate the item(s) ponting by the
pointer.


A look-up table of some sort. Or perhaps, instead of a pointer:

template <class T>
struct DynmPtr {

T *const p;

bool is_array;
};

also, is there any way to determine whether the allocated memory
pointed by the pointer is allocated through new or c version calloc/
malloc?


The language provides no such facility.

You would have to keep track of it yourself.
 
?

=?ISO-8859-15?Q?Juli=E1n?= Albo

hello, may i know how i can determine whether a pointer is pointing to
an array or a single item during runtime?

this is because in certain situation, i need to determine whether to
use delete or delete[] to deallocate the item(s) ponting by the
pointer.

You can avoid the need to determine that by allocating an array of one
element when you want a single item and always using delete [].
 
S

sandy

some compilers internally call malloc when u use "new" to allocate
memory.
I dont think u might be able to detect whether memory is allocated
using new or malloc during run time.

--
sandeep nitta

Julián Albo said:
hello, may i know how i can determine whether a pointer is pointing to
an array or a single item during runtime?

this is because in certain situation, i need to determine whether to
use delete or delete[] to deallocate the item(s) ponting by the
pointer.

You can avoid the need to determine that by allocating an array of one
element when you want a single item and always using delete [].
 
P

peter koch

hello, may i know how i can determine whether a pointer is pointing to
an array or a single item during runtime?

You can't do so in the general case, but if you stick to a single
healthy rule, your problem is easily solved: simply don't use new[].
new[] really is not needed as there is a far better substitute using
std::vector.
this is because in certain situation, i need to determine whether to
use delete or delete[] to deallocate the item(s) ponting by the
pointer.

also, is there any way to determine whether the allocated memory
pointed by the pointer is allocated through new or c version calloc/
malloc?

Nope. new could easily just call malloc.
thank you.

/Peter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top