C - 由realloc创建的数组的大小

时间:2012-07-23 10:10:23

标签: c sizeof realloc

  

可能重复:
  determine size of dynamically allocated memory in c

我的c代码中有struct,但此问题对所有其他类型也有效,因此我将使用int代替我创建的struct

int *a = realloc(NULL, 10*sizeof(int) );
printf("%d\n",sizeof(a)); //prints 4, needed to be 40

int b[10];
printf("%d\n",sizeof(b)); //prints 40

我的问题是:我在我的代码中使用realloc,我不知道如何找到数组的总大小。最简单的方法是什么?谢谢。

4 个答案:

答案 0 :(得分:1)

请记住sizeof在编译时进行评估(除了VLA,但不是你的情况)。想象一下,你将realloc参数的大小作为用户的输入:编译器无法知道实际的分配大小。所以它返回指针的大小。

答案 1 :(得分:0)

简而言之,您需要存储在代码中,并传递给您的各种功能。由于您已将该信息传递到realloc,因此它已经可用。

还要记住sizeof不能用于指针,它只返回指针的大小,而不是指针指向的内存大小。

答案 2 :(得分:0)

来自http://en.wikipedia.org/wiki/Sizeof

In the programming languages C and C++, the unary operator sizeof
is used to calculate the size of any datatype, measured in the
number of bytes required to represent the type.

这意味着这个

sizeof( int* )

返回架构上指针的大小。如果你想知道阵列的大小,你必须这样做:

sizeof( your_type ) * array_size

答案 3 :(得分:0)

sizeof(a)返回指针的大小,而不是它所指向的大小。如果您使用mallocrealloc分配内存,则必须自行跟踪。