【发布时间】:2019-11-18 15:17:48
【问题描述】:
我想把我的动态数组的容量打印出来,但是不管怎么改,总是说两个数组的容量都是2。
代码(tmp.c)
#include <stdio.h>
#include <stdlib.h>
int main(){
int *ptr1 = (int *)malloc(sizeof(int) * 3);
int capacity_ptr1 = sizeof(ptr1)/sizeof(int);
printf("capacity of ptr1 is: %d\n", capacity_ptr1 );
int *ptr2 = (int *)realloc(ptr1, sizeof(int) * 5);
printf("capacity of ptr2 is: %ld\n", sizeof(ptr2)/sizeof(int) );
return 0;
}
我在终端执行的操作
gcc -std=c99 tmp.c -o tmp
./tmp
终端输出
capacity of ptr1 is: 2
capacity of ptr2 is: 2
无论我为 malloc() 和 realloc() 输入什么容量参数,我都会得到这个输出
【问题讨论】:
-
sizeof(ptr2)不会给你分配内存的容量。它给你的只是int指针的大小,它保持不变。 -
sizeof指针是实际指针的大小,而不是它可能指向的大小。当您在 C 中进行动态分配时,您必须自己跟踪“大小”。 -
sizeof array / sizeof *array仅适用于 Arrays,并且仅适用于声明它们的 范围。int *ptr1声明了一个指针,所以sizeof ptr1是sizeof (a_pointer)(x86_64 上通常是 8 字节),sizeof (int)是4。无论您为sizeof ptr1 / sizeof (int)分配多少int,在x86_64 上都将是2。 -
使用搜索引擎。如果最频繁的重复,它就是一个
标签: c malloc dynamic-memory-allocation sizeof