2016-03-15 153 views
-2

我只是想用C 动态声明数组的代码如下:为什么我会丢失字节?

int maxSize = 3; 
int *answer; 
answer = malloc(maxSize * sizeof(int)); 
printf("this is max size: %d\n", maxSize); 
printf("this is the mult result: %d\n", maxSize * sizeof(int)); 
printf("size of answer in bytes: %d\n", sizeof(answer)); 
printf("size of the answer array: %d\n", sizeof(answer)/sizeof(answer[0])); 

打印结果给我:

this is max size: 3 
this is the mult result: 12 
size of answer in bytes: 8 
size of the answer array: 2 

我不认为这是一个架构的东西(相反我没有经验),但我在Macbook Pro上运行它。

我不明白为什么malloc只为整数数组分配8个字节而不是12个字节。

+0

你为什么会分配12个字节? –

+0

你给maxSize提供了一个值吗?我没看到它。 – DigitalNinja

+0

@George Stocker因为我的机器的大小和int是4个字节。由于'maxSize'是3个字节,所以我希望为长度为3的整数分配足够的内存。 – FSB

回答

1

Sizeof(answer)将返回内存中变量answer的大小,它与sizeOf(int *)相同。由于您的计算机体系结构是64位的,因此指针的大小为8个字节,这是您的结果。您的计算机确实分配了12个字节,但您确实没有办法验证这一点。

+0

谢谢。这意味着C编译器不知道动态分配的内存,并且不能使用函数跟踪分配的内存,是否正确? – FSB

+0

是的,你绝对正确。 – matanso

相关问题