Tag: list

C中的分段错误与malloc

我在下面的场景中遇到了分段错误:当从文件中读取ip地址列表时,我将IP ADDRESS和端口存储在链接列表中。 因为我的文件读取循环重复自己,按照链接列表逻辑 – 当我再次malloc我的临时指针时,我面临分段错误。 请在下面找到代码段: struct woker_conf { int port; char *ip_address; struct worker_conf *next; } *head; void open(int8_t nbrwrk) { FILE *fp = NULL; char line[1024] = {0}; int i = 1; char *ch; struct worker_conf *config, *temp; head = NULL; fp = fopen(“abcd.txt”,”r”); if (fp == NULL) exit(1); while (fgets(line, sizeof line, […]

gtk-get在liststore treeview中单击哪个项目

我想获取在树视图中单击的项目,这会导致“行激活”事件。 我在树视图中有一个列表存储。 单击其中的任何项目将显示另一个列表。 但是我怎么知道点击了哪个项目? 我怎么找到的? 码- GtkWidget * init_tree() { GtkListStore *liststore = gtk_list_store_new(1, G_TYPE_STRING); GtkTreeIter treeiter; gtk_list_store_append(liststore, &treeiter); gtk_list_store_set(liststore, &treeiter, 0, “Register”, -1); gtk_list_store_append(liststore, &treeiter); gtk_list_store_set(liststore, &treeiter, 0, “New Configuration”, -1); gtk_list_store_append(liststore, &treeiter); gtk_list_store_set(liststore, &treeiter, 0, “Edit Configuration”, -1); gtk_list_store_append(liststore, &treeiter); gtk_list_store_set(liststore, &treeiter, 0, “Delete Configuration”, -1); gtk_list_store_append(liststore, &treeiter); gtk_list_store_set(liststore, &treeiter, 0, “Add location […]

如何将结构列表/数组从python传递给C

我有一个C函数,必须可以从C和Python调用。 我无法弄清楚如何将c-cons结构的python列表传递给c函数,每个结构包含几个嵌套结构。 这些结构中的一个在python中看起来像这样: class STATION_MM_NODE(ctypes.Structure): _fields_ = [ (“signal”, MM_STRUCT), (“noise”, MM_STRUCT), (“signalWindowLen”, ctypes.c_double), (“metadata”, SAC_PZ) ] 在C中像这样: typedef struct stationMMnode { struct mantleMagStruct *signal; struct mantleMagStruct *noise; double signalWindowLen; SAC_PZ metadata; } stationMMnode_t; 采用stationMMnode结构数组的c函数可以调用为: double magnitudeCompute_Mw_Mm_Event(stationMMnode_t **stationMMarray, int numStations); 例如,我可以将其称为纯粹来自C,如: int testfunc() { stationMMnode_t *node1 = malloc(sizeof(struct stationMMnode)); node1->signalWindowLen = 500; stationMMnode_t *node2 = […]

在C中创建和理解结构的链接列表

我无法一起掌握struct和链表数据结构的概念。 例如,假设我们有这样的代码:一个具有worker的内容的struct ,这些struct的链表包含每个worker的节点和指向下一个节点的指针(?)。 typedef struct Schedule { char name[10]; char description[10]; int hours; int workordernum; } Work; typedef struct linkedlist { struct Schedule work; struct linkedlist *next; } Node; 问题是如何创建一个始终在列表开头添加节点的方法,一种使用用户定义的workordernum将其添加到列表中任何位置(中间)的方法,以及始终将其添加到最后的方法。 我不太了解->和*正确使用。 我确实在网上阅读了有关创建头部和尾部节点的信息,但我没有正确使用它,因为它们有一个列表struct和一个节点struct 。 我没有得到的另一件事是,假设在列表的开头添加一个节点,你如何改变以前所有节点的每个workordernum值呢? 我理解每次添加,删除或移动节点时都必须跟踪,这意味着每次调用这些方法时,我们必须有一个跟踪数字的变量。 因此,如果列表中的节点都已准备就绪,其顺序为1,那么我们在开头添加另一个节点,如何将订单号1更改为2,将1添加到1? 或者如果我们只有一个指针,node-> next-> next-> next怎么工作? 然后我们将如何打印所有这些? 因为我们不能使用for循环。 所以这些是我无法把握代码的概念。 如果你花时间解释它,而不是仅仅给出代码,如果可能的话,我会非常感激。 因为我必须应用我学到的东西来移动并删除节点。 我想自己学习。 如果必须给出一些代码示例,那就没关系,但请不要为我发布所有答案代码。 -谢谢 *请原谅任何格式错误,因为我是这个网站的新手。 编辑:我确实理解指针是一个地址,并且->属于“指向”一个成员。 我的意思是我理解所有基础知识,但我的理解不够坚定,否则我可以做我需要帮助的事情。 编辑2:我将尝试使用我目前学到的链接列表创建一个头节点。 我将使用上面的结构,它将是松散的代码,而不是完美的。 这只是为了确保我到目前为止在正确的轨道上。 int […]