2012-11-10 50 views
0

我決定在這個程序中使用結構來保持它的組織,所以我現在有一系列的結構。我的問題是如果我必須malloc在另一個結構內的結構。例如:Malloc struct中的結構?

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; 

等等,所以將我的聲明,並mallocs什麼樣子的?

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 
+0

爲了記錄,您確實需要檢查'malloc'的值的返回值爲零。不這樣做是不可靠的配方。 – eh9

回答

0

如果你使用指針的結構內結構必須用於管理內存。 (malloc/free)

如果tou使用struct中的結構體,則不管理內部結構體的內存。由於它們是外部結構的一部分,因此不需要。

您可以使用指針指向外部結構中的結構,因此您必須使用malloc和free。

首先爲您的外部結構分配內存,然後將所有指向內部結構的指針設置爲null或爲其分配內存。

0

結構中沒有結構。

在你的結構中有一個指針,並且分配了指針的內存。

考慮下面的結構:

typedef struct node { 
    struct node* next; 
} 

(這是很常見 - 一個鏈表)

多少節點應該把它分配?

+0

這是一個使用多種啓發式算法的分檔應用程序(HW)。在每種啓發式方法中都有多個鏈接列表,其中包含可變數量的節點(即,BestFit),爲了組織目的,我將它們構造爲自己的結構。正在從外部文本文件處理節點的數量(然後正確地插入)。 – boutrosc

+0

我想說的是:編譯器不能自動分配這個,因爲它可能是自引用的。 –