我的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
,我不知道如何找到数组的总大小。最简单的方法是什么?谢谢。
答案 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)
返回指针的大小,而不是它所指向的大小。如果您使用malloc
或realloc
分配内存,则必须自行跟踪。