-2

可能重复:
确定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

4 回答 4

1

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

于 2012-07-23T10:14:48.367 回答
0

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

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

于 2012-07-23T10:16:32.360 回答
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
于 2012-07-23T10:17:26.493 回答
0

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

于 2012-07-23T10:23:02.293 回答