我正在嘗試開發一個使用兩個結構的動態分配的C循環緩衝區。一個擁有詳細信息,另一個主要用作從主循環到緩衝區結構的指針(因爲在運行時會分配多個數組)。C - 動態地分配結構中的結構的循環緩衝區
由於它是一個圓形緩衝器,我有一個指針「下一個」,它指向該陣列中的下一個項目(所以最後一個數組索引指向所述第一等)
這是兩個結構對象我有:
typedef struct {
int a;
int b;
struct1 *next; // pointer to next struct1 object in array
} struct1;
typedef struct {
struct1 *curr;
struct1 *start = NULL;
struct1 *end = NULL;
} struct2;
然後,我有我的初始化函數,從main調用來啓動一個新的循環緩衝區。
這是我不完全確定要做什麼的部分。
#define minSize 10
struct2 * initialize()
{
struct2 **newBuf = malloc(sizeof(*newBuf));
newBuf->malloc(sizeof(*newBuf->quotes) * newBuf->minSize);
// set the start pointer
newBuf.curr[0] = newBuf->start;
newBuf.curr[0]->next = NULL;
for (int i = 1; i < minSize; i++)
{
struct1 *new = NULL;
newBuf.curr[i] = new; // make index i = NULL
// have the previous index point to the "next" current
if (i > 0)
newBuf.curr[i-1]->next = newBuf.curr[i];
}
// connect last index with first
newBuf.curr[minSize - 1]->next = newBuf.curr[0];
// set the end pointer
newBuf->end = newBuf->start;
return newBuf;
}
從搜索,我發現this answer on how to initialize an array of structs within a struct通過使用malloc爲最初分配的空間,但也很困惑我的代碼將如何排隊,因爲我有一個指針來定義開始並在限定的圓形緩衝的年底 struct2,以及下一個指針作爲struct1的一部分。
此外,我選擇了定義*** newBuf *而不是** newBuf *,因爲我正在考慮它作爲指針的指針(考慮單鏈表)。雖然,如果我錯了,請糾正我。
我已經完成了Java中動態分配的循環緩衝區,但不是C和C++,所以我很難弄清楚如何初始化所有內容。我基本上被困在這個混亂,不知道下一步去哪裏。
任何可以給予的幫助將不勝感激!
'typedef結構{ struct1 CURR []; '不計算。請發佈真實的代碼。也許你會得到真正的答案。 – wildplasser 2013-04-07 23:24:22
是的,wildplasser:http://en.wikipedia.org/wiki/Typedef – 2013-04-07 23:35:27
沒有@RobG。 OP *可能意味着一個VLA,但它僅作爲結構中的最後一個元素有效。無論如何:他糾正了它。結論:它是*不是真實的代碼*。 – wildplasser 2013-04-07 23:43:49