1

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

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)仍然是一样的。

我错过了什么吗?

4

3 回答 3

1

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

于 2013-11-14T16:47:35.410 回答
1

sizeof(s->num)为您提供类型指针的大小,int*在您的malloc. 更准确地说,sizeof不是函数而是运算符,并且值由编译器给出。它不是返回分配的数组大小的函数malloc

于 2013-11-14T16:53:50.990 回答
0

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

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

  1. 当您尝试分配 5 个整数的数组时,向其添加 1 个整数并使其变为 6。
  2. 隐藏第一个整数中的大小并ptr + 1作为指向数组的指针返回。
  3. 现在您可以在 处获得大小*(ptr - 1),它隐藏在第一个 int 中。
于 2013-11-14T17:05:46.220 回答