我正在尝试使用两个结构在 C 中开发一个动态分配的循环缓冲区。一个保存详细信息,另一个基本上用作从 main 指向循环缓冲区结构的指针(因为在运行时将分配多个数组)。
因为它是一个循环缓冲区,所以我有一个指针“next”,它指向数组中的下一项(所以最后一个数组索引指向第一个,等等)
这些是我拥有的两个结构对象:
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;
}
通过搜索,我找到了关于如何通过使用 malloc 来初始化结构中的结构数组来初始化空间的答案,但是我很困惑我的代码将如何排列,因为我有定义循环缓冲区的开始和结束的指针在 struct2 中,以及作为 struct1 一部分的下一个指针。
此外,我选择定义 ***newBuf* 而不是 **newBuf*,因为我认为它以某种方式指向指针(考虑单链表)。不过,如果我错了,请纠正我。
我已经在 Java 中完成了动态分配的循环缓冲区,但不是 C 或 C++,所以我很难弄清楚如何初始化所有内容的差异。我基本上被困在这个烂摊子上,不知道下一步该去哪里。
任何可以提供的帮助将不胜感激!