【问题标题】:Why am I losing bytes? [duplicate]为什么我会丢失字节? [复制]
【发布时间】:2016-03-15 17:46:34
【问题描述】:

我只是想在 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 个字节。

【问题讨论】:

  • 你认为它为什么会分配 12 个字节?
  • 你给maxSize一个值了吗?我没看到。
  • @George Stocker 因为我机器中的和 int 的大小是 4 个字节。由于maxSize 是 3 个字节,我希望为长度为 3 的整数数组分配足够的内存。
  • @DigitalNinja 是的,我忘了把它放在代码示例中。
  • answer 是一个指针,而不是一个数组。

标签: c


【解决方案1】:

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

【讨论】:

  • 谢谢。这意味着 C 编译器不了解动态分配的内存,并且您不能使用函数来跟踪分配的内存,对吗?
  • 是的,你完全正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 2023-03-14
  • 2014-08-23
相关资源
最近更新 更多