Malloc'ing 一个结构内部的双指针结构?

Malloc'ing a double pointer structure inside a struct?

这里是菜鸟。我正在尝试按如下方式初始化一个简单的结构:

typedef struct person_s {
    char *fname;                 ///< first name of the person
    char *lname;                 ///< last name of the person
    char *handle;               ///< handle of the person
    struct person_s **friends;  ///< dynamic collection of friends
    size_t friend_count;        ///< current number of friends
    size_t max_friends;         ///< current limit on friends
} person_t;

我想我理解为这个结构中的每个成员使用 malloc,除了其中的双指针 friends 结构。如何为这个双指针分配内存?

这是我对其他数据成员的 malloc:

person_t *newperson(char *fn, char *ln, char *han){
    person_t *p = NULL;
    p = malloc(sizeof(person_t));

    p->fname = malloc(strlen(fn) +1);
    strcpy(p->fname, fn);

    p->lname = malloc(strlen(ln) +1);
    strcpy(p->lname, ln);

    p->handle = malloc(strlen(han) +1);
    strcpy(p->handle, han);

    p->*friends = malloc(sizeof(*friends));

    p->friend_count = malloc(2*sizeof(friend_count));
    p->friend_count = 0;

    p->max_friends = malloc(2*sizeof(max_friends));
    p->friend_count = 0;
}

编辑:不好意思,我忘了包括它在初始化这个结构的函数中。

Edit1:为了回应评论,我在这里试图实现的是创建一个由 p->friends 数据成员指向的朋友的动态“数组”。此外,我有一个动态散列 table,将它用作一个集合来放置与此人链接的所有朋友是否是个好主意?指针和动态分配的概念对我来说仍然有些混乱,请原谅我的误解。

动态收集单指针就够了:

struct person_s *friends; 

...

p->friends = malloc(max_friends * sizeof(struct person_s));

首先保持语法简单,让我们假设你已经 typedefed struct person_s as person.

指向指针的指针与指向指针数组的指针相同。

因此,首先需要分配数组,然后需要分配数组中的各个元素。

这将分配数组:

friends = malloc(max_friends * sizeof(*friends));

这有效,因为 friends**person 类型,所以 *friends 必须是 *person.

类型

然后,您将需要一个 for 循环,在其中分配每个 person:

friends[i] = malloc(sizeof(**friends)); //or sizeof(person), same thing.

(发完问题马上打了上面的,结果还没来得及回答就发现问题被关闭了,后来问题被打开了,但是一直没有通知我,我发帖了因为我不想现在就把它扔掉。)