为结构内的数组分配内存

时间:2013-11-14 16:44:59

标签: c

我想将内存分配给结构中的数组。

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)仍然是相同的。

我错过了什么吗?

3 个答案:

答案 0 :(得分:1)

s->num是一个指向整数的指针,所以它的大小永远不会改变。您必须以其他方式跟踪从s->num开始的已分配内存块。

答案 1 :(得分:1)

sizeof(s->num)为您提供int*类型指针的大小,该大小在malloc之后不会更改。更准确地说,sizeofnot a function but an operator,值由编译器给出。它不是返回用malloc分配的数组大小的函数。

答案 2 :(得分:0)

因为s->num不是动态创建的数组而是指针。因此它会为您提供sizeof指针。

要查找动态分配的数组的大小,先前的SO answer给出了如下线索,

  1. 当您尝试分配5个整数的数组时,再添加1个整数并使其为6。
  2. 隐藏第一个整数中的大小,并返回ptr + 1作为指向数组的指针。
  3. 现在你可以获得*(ptr - 1)的大小,这是第一个隐藏的。