我想将内存分配给结构中的数组。
struct str
{
int *num;
};
creat()
{
str s = malloc(sizeof(str));
s->num = (int*)malloc(5*sizeof(int));
}
但是在执行 line 之后s->num = (int*)malloc(5*sizeof(int));
,如果我检查,sizeof(s->num)
仍然是一样的。
我错过了什么吗?
我想将内存分配给结构中的数组。
struct str
{
int *num;
};
creat()
{
str s = malloc(sizeof(str));
s->num = (int*)malloc(5*sizeof(int));
}
但是在执行 line 之后s->num = (int*)malloc(5*sizeof(int));
,如果我检查,sizeof(s->num)
仍然是一样的。
我错过了什么吗?
s->num
是一个指向整数的指针,因此它的大小永远不会改变。您将不得不跟踪以s->num
其他方式开始的已分配内存块。
sizeof(s->num)
为您提供类型指针的大小,int*
在您的malloc
. 更准确地说,sizeof
不是函数而是运算符,并且值由编译器给出。它不是返回分配的数组大小的函数malloc
。
这是因为s->num
不是动态创建的数组而是指针。因此,它为您提供了sizeof
指针。
要找到动态分配数组的大小,先前的SO 答案给出了如下线索,
ptr + 1
作为指向数组的指针返回。*(ptr - 1)
,它隐藏在第一个 int 中。