gpt4 book ai didi

c - 在C中初始化图时如何分配内存?

转载 作者:行者123 更新时间:2023-11-30 16:48:28 25 4
gpt4 key购买 nike

我正在尝试用 C 语言学习图形,目前我正在尝试编写一个函数,用给定的数据结构初始化图形。所以我的结构是:

typedef struct linked list{
int index;
struct linked list *next;
} List;

typedef struct {
char *name;
List *outlist;
int outdegree;
} Node;

typedef struct {
int maxSize;
Node *table;
} Graph;

我有三个功能:

int initialise_graph(Graph *mygraph, int maxSize)
{
}

int insert_graph_node(Graph *mygraph, int n, char *name)
{
}

int insert_graph_link(Graph *mygraph, int source, int target)
{
}

我目前正在努力解决第一个功能。我知道我必须在第一个函数中为每个数据结构分配内存,但我不知道如何通过 for 循环为每个结构分配内存。如果有人能帮助我,我将不胜感激。

最佳答案

I'm currently struggling with the first function. I know that I have to allocate memory for each data structure in the first function, but I don't know how to malloc the memory for each struct through the for loop

由于您的 Graph 对象有一个 maxSize 成员和一个指向 Node 的指针,并且 Node 中没有链接,因此意图很明显供您分配和初始化节点数组。

您需要为最初为空的图中所有未使用的节点提供合理的值。我建议使用 NULL 作为名称(尚未指定),NULL 作为 outlist (即它是空的)和 0 表示出度

我将通过为节点调用 calloc 来分配空间并将该空间中的所有字节归零来完成此操作。

int initialise_graph(Graph *mygraph, int maxSize)
{
mygraph->maxSize = maxSize;
mygraph->table = calloc(maxSize, sizeof *table);
return 0;
}

就这样,你就完成了。

但是:

  • 您可能需要添加一些代码来检查table 是否不为空。对此意见不同,通常我依靠平台的内存保护来获取它,但如果你在嵌入式世界中,这可能不起作用。
  • 严格来说,上面的代码不可移植,因为 NULL 指针不需要用全零字节的模式表示。如果您担心这个问题,请使用循环来初始化节点。 (再次省略 NULL 检查)。

     mygraph->table = calloc(maxSize, sizeof *table);
    // Null check would go here
    for (i = 0 ; i < maxSize ; ++i)
    {
    table[i].name = NULL;
    table[i].outlist = NULL;
    table[i].outdegree = 0;
    }

关于c - 在C中初始化图时如何分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42951412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com