c - 在 C 中动态定义图

标签 c memory dynamic graph malloc

我正在用 C 构建一个图(无向)。图节点是结构化的:

struct graphNode{
    int val;
    int neighborCount;
    struct graphNode *neighbors[MaxN]; //this is adjacency list
}

现在,我必须动态初始化一个图的 n 个节点,或者我需要一个结构数组 graphNodes。然后,对于每个节点,我必须首先将邻居数组初始化为 NULL。我稍后会在添加节点时向其添加邻居。根据给定要求定义图形的正确方法是什么?我已经完成了以下操作,但我认为这是不正确的。我是 C 的新手。

struct graphNode *createGraph(int nodes){
        struct graphNode *graph = malloc(nodes * sizeof(*graph));
        for(int i=0;i<MAXN;i++){
                graph[i]->n = malloc(MAXN * sizeof(struct graphNode *));
        }
        return graph;
}

最佳答案

由于 graphNode 结构包含邻居指针数组,您需要做的就是为 graphNode 数组分配空间,这就是第一个 malloc 可以。

鉴于您希望所有邻居指针都初始化为 NULL,我会将 malloc 更改为 calloc(自动归零内存)。生成的代码如下所示

struct graphNode *createGraph(int nodes){
    struct graphNode *graph = calloc(nodes, sizeof(*graph));
    return graph;
}

关于c - 在 C 中动态定义图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34710576/

相关文章:

c++ - 堆分配的成员引用是一个糟糕的主意吗?为什么?

java - 在Java中,如何在不提前知道名称的情况下加载类?

java - 用户创建的新类(class)?

搜索引擎的动态页面

c - 二维数组中 c 语言的螺旋矩阵

c - 为什么 gcc 中没有延迟

c - 使用 struct 和 union 通过 tcp ip 发送数据

c - 用于求平方根的最快汇编代码。需要解释

read.xlsx 需要很长的时间和大量的内存

c - 声明大数组时出现堆栈溢出异常