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