【问题标题】:Malloc a struct within a struct?在结构中分配结构?
【发布时间】:2012-10-30 15:17:34
【问题描述】:

我决定在这个程序中使用结构来保持它的组织性,所以我现在有一个结构链。我的问题是我是否必须 malloc 另一个结构中的结构。例如:

typedef struct OnlineS {
struct BBSIS *bbsi;
struct BBVIS *bbvi;
struct VBVIS *vbvi;
} *OnlineP;

typedef struct BBSIS{
struct FirstFitS *ff;
struct BestFitS *bf;
struct NextFitS *nf;
int itemNum;
int binNum;
int binMin;
int binMax;
int *items;
}*BBSIP;

等等,我的声明和 malloc 会是什么样子?

OnlineP on = malloc(sizeof (struct OnlineS));
on->bbsi = malloc(sizeof (struct BBSIS));
on->bbsi->bf = malloc(sizeof (struct BestFitS));
on->bbsi->nf = malloc(sizeof (struct NextFitS));
on->bbsi->ff = malloc(sizeof (struct FirstFitS));
on->bbvi = malloc(sizeof (struct BBVIS));
on->bbvi->bf = malloc(sizeof (struct BestFitS));
//ETC

【问题讨论】:

  • 作为记录,您确实需要检查 malloc 的返回值是否为零。不这样做会导致不可靠。

标签: struct malloc


【解决方案1】:

如果您在结构中使用指向结构的指针,您还必须为此管理内存。 (malloc/free)

如果你在一个结构体中使用结构体,你就不会为内部结构体管理内存。由于它们是外部结构的一部分,因此没有必要。

您在外部结构中使用指向结构的指针,因此您必须使用 malloc 和 free。

首先为外部结构分配内存,然后将所有指向内部结构的指针设置为 null 或为其分配内存。

【讨论】:

    【解决方案2】:

    你的结构中没有结构。

    你的结构中有一个指针,并且为指针分配了内存。

    考虑以下结构:

    typedef struct node {
       struct node* next;
    }
    

    (这很常见——链表)

    应该分配多少节点?

    【讨论】:

    • 这是一个使用多种启发式算法的分箱应用程序 (HW)。在每个启发式(即 BestFit)中有多个具有可变数量节点的链表,出于组织目的,我将其制成了自己的结构。正在从外部文本文件处理节点数(然后正确分配)。
    • 我想说的是:编译器无法自动分配它,因为它可能是自引用的。
    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2015-11-06
    • 1970-01-01
    相关资源
    最近更新 更多