- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 GLib 作为替代方法来编写我自己的数据结构。我的目标是仅使用 glib 编写一个基于邻接表的简单图形数据结构。
现在的代码如下
#include <glib.h>
#include <glib/gprintf.h>
struct graph
{
GArray * nodes;
};
struct node
{
GArray * neighbors;
gint weight;
GString * label;
};
struct neighbor
{
struct node * dst;
gint weight;
};
struct graph * graph_new(void);
void graph_node_add(struct graph * graph, const gchar * label, gint weight);
void graph_edge_add(struct graph * graph, struct node * src, struct node * dst, gint weight);
struct graph * graph_new(void)
{
struct graph * g = g_new(struct graph, 1);
g->nodes = g_array_new (FALSE, FALSE, sizeof (struct node));
return g;
}
void graph_node_add(struct graph * graph, const gchar * label, gint weight)
{
struct node * node = g_new(struct node, 1);
node->neighbors = g_array_new(FALSE, FALSE, sizeof (struct neighbor));
node->label = g_string_new(label);
node->weight = weight;
graph->nodes = g_array_append_val(graph->nodes, node);
}
void graph_edge_add(struct graph *graph, struct node *src, struct node *dst, gint weight)
{
struct neighbor * neighbor = g_new(struct neighbor, 1);
neighbor->dst = dst;
neighbor->weight = weight;
src->neighbors = g_array_append_val(src->neighbors, neighbor);
}
int main(void)
{
struct graph * G = graph_new();
graph_node_add(G, "u", 10);
graph_node_add(G, "v", 20);
graph_node_add(G, "w", 15);
struct node * n = &g_array_index(G->nodes, struct node, 0);
g_printf("segfaulting here\n");
char * s = n->label->str;
g_printf("LABEL %s\n", s);
return(0);
}
从 struct node
检索 GString
时出现段错误(第 59 行左右)。
自从我开始使用 GLib,欢迎任何更好的方法来处理我的目标。
注意,我没有写释放内存的函数,那只是为了让这道题的源代码更小。
在 linux 上,代码可以编译为:
gcc `pkg-config --cflags --libs glib-2.0` -o graph graph.c
最佳答案
发生这种情况是因为在 graph_node_add() 中你最终添加了一个指向数组的指针,而不是你想要添加的数据。
这样的事情可能会奏效:
struct node node;
node.neighbors = g_array_new(FALSE, FALSE, sizeof (struct neighbor));
node.label = g_string_new(label);
node.weight = weight;
graph->nodes = g_array_append_val(graph->nodes, node);
关于c - 使用 GLib 的 GArray 存储 `structs` 和检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57847040/
我想在 GArray 中添加一些字符串对象。但是当我阅读 API 手册时 g_array_new(),它在创建数组时寻找要添加的元素的大小,但是 不同的字符串对象有不同的长度,所以我该如何处理这个问题
当 g_array_append_val() 时会发生什么或 GLib 中的其他附加/前置函数之一,使 GArray 的长度大于 guint (unsigned int) 所能容纳的长度? 文档对此没
我有一些奇怪的 Glib 行为,在互联网上搜索了一下,发现 this Glib tutorial ,第二个代码块要具体: //ex-garray-2.c #include #include //
我创建 drvm *drv我的功能中的结构。此结构本身包含包含 malloc()-ed 的字段字段(uint32_t *buffer)。执行此操作的代码类似于: ... size_t elm_size
我有一个 GValue 的 GArray(全非零),它是在运行时用 g_array_append_val 分配的。我想知道如何找出最后一个元素的索引是什么,或者更准确地说,数组包含多少个元素。代码如下
我正在尝试将字符串映射到 GArrays使用GHashTable 。到目前为止,我还没有成功。 我像这样声明哈希表: hash_table = g_hash_table_new_full(g_str_
编译器说 GHashTable 未定义,但如果我在从数组检索 GHashTable 的代码上方使用它,则显然它已定义。到底是怎么回事?我很困惑。 gcc -Wall -o tht `pkg-confi
这是一个对 GArray 进行排序的练习程序,我使用 sizeof() 来了解数组的大小。 从逻辑上思考,sizeof(x) 应该是 24,即 6 个整数 * 每个整数的大小,即 4 - 6*4。 但
我想使用 glib 库的 GArray 将位置 x 的值设置为给定值。就像我使用 c-array 和 array[x]=5; 为什么我找不到执行此操作的函数?这不就是一个数组的意思吗?文档:https
我正在研究openface 。 Openface有unknown classification python cod e. 我正在测试lfw-classification-unknown.py的训练部
我正在尝试使用 GLib 作为替代方法来编写我自己的数据结构。我的目标是仅使用 glib 编写一个基于邻接表的简单图形数据结构。 现在的代码如下 #include #include struct
我是一名优秀的程序员,十分优秀!