gpt4 book ai didi

c - 指向 struct 的双指针中的第一个元素是 jiberrish

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:33 25 4
gpt4 key购买 nike

我正在用 C 语言创建一个简单的结构数组,但第一个结构总是乱码。我该如何解决这个问题?

我试过用很多方法将双指针的第一个元素设置为结构体,但总是失败。

这是我的 graph.h 文件:


#ifndef GRAPH_H
#define GRAPH_H

#include "set.h"

typedef struct urlNode * URLList;
typedef struct GraphRep * Graph;

struct urlNode {
int id;
char* URL_NAME;
URLList next; // link to next node
};

struct GraphRep {
int nV;
URLList * collections;
};

Graph newGraph(Set s);
int nameToId(Graph g, char *name);
void showGraph(Graph g);

#endif


我的 newGraph(Set s) 函数如下所示:

Graph newGraph(Set s){

int size = nElems(s);
Graph new_graph = malloc(sizeof(struct GraphRep));
if (new_graph == NULL) {
printf("ERROR: COULDNT ALLOCATE GRAPH\n");
}

new_graph->nV = size;
char *name = getNextVal(s);


// THIS IS THE NODE TO BE ADDED TO THE GRAPH
URLList list_to_add = malloc(sizeof(struct urlNode));
list_to_add->URL_NAME = strdup(name);
list_to_add->id = 0;
list_to_add->next = NULL;


// HERE I ADD THE NODE TO THE GRAPH.
new_graph->collections[0] = list_to_add;

// PRINT OUT THE VALUES OF THE NEWLY ADDED NODE TO MAKE SURE IT WORKS
// THE URL_NAME IS PRINTED OUT FINE
// BUT THE ID IS JIBBERISH.
printf("%s\n", new_graph->collections[0]->URL_NAME);
printf("%d\n", new_graph->collections[0]->id);
if(new_graph->collections[0]->next != NULL) {
printf("%s\n", new_graph->collections[0]->next->URL_NAME);
printf("%d\n", new_graph->collections[0]->next->id);
}
printf("\n");

return new_graph;
}

我希望 new_graph->collections[0]->id 为 0,但它一直给我随机整数。此外,即使新声明的指向结构的指针的 next 为 NULL,它仍然会给我一个乱七八糟的 next 值。任何帮助将不胜感激,谢谢!

最佳答案

对象*new_graph 的数据成员collections 未初始化。

只有这个数据成员被初始化

new_graph->nV = size;

所以这个声明

new_graph->collections[0] = list_to_add;

导致未定义的行为。

如果您需要URLList 类型的指针数组,您必须分配内存并将其地址分配给指针collections

例如

new_graph->collections = malloc( new_graph->nV * sizeof( URLList ) );

然后是这条语句

new_graph->collections[0] = list_to_add;

可能是有效的。

(我假设数据成员nV 对应于动态分配数组中元素的数量,虽然它可能不是真的)

注意因为指针name指向的字符串在函数中没有改变所以最好这样声明

const char *name = getNextVal(s);

关于c - 指向 struct 的双指针中的第一个元素是 jiberrish,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57326891/

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