开发者

Get the length of dynamically allocated array in C [duplicate]

This question already has answers here: 开发者_JAVA百科 Closed 10 years ago.

Possible Duplicate:

length of array in function argument

How do I get the length of a dynamically allocated array in C?

I tried:

sizeof(ptr)
sizeof(ptr + 100)

and they didn't work.


You can't. You have to pass the length as a parameter to your function. The size of a pointer is the size of a variable containing an address, this is the reason of 4 ( 32 bit address space ) you found.


Since malloc just gives back a block of memory you could add extra information in the block telling how many elements are in the array, that is one way around if you cannot add an argument that tells the size of the array

e.g.

char* ptr = malloc( sizeof(double) * 10 + sizeof(char) );
*ptr++ = 10;
return (double*)ptr;

assuming you can read before the array in PHP, a language which I am not familiar with.


Here you see the dangers of C: a ptr just points to memory and has no way of knowing what supposed size is. You can just increment and increment and the OS might complain eventually, or you crash your program, or corrupt other ones. You should always specify the size, and check bounds yourself!


This is similar to Using pointer for crossing over all elements in INTEGER array

See my answer here

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜