g_slist_copy_deep returns 分段错误
g_slist_copy_deep returns segmentation fault
寻求有关使用 g_slist_copy_deep
复制 GSList
的帮助。
我有一个 GSList
银行账户结构(帐号和描述),我想使用 g_slist_copy_deep
将那个 GSList
复制到另一个 GSList
。我的复制功能出现段错误。
首先是结构定义。
typedef struct Accounts {
gchar number[100];
gchar description[500];
} Account;
接下来是复制功能。
GCopyFunc build_temporary_list(gpointer master_account, gpointer user_data) {
/* Retrieve current master account */
GSList *master_account_ptr = (GSList *)master_account_list;
Account * account_ptr = (Account *)master_account_ptr->data;
Account master_account = *account_ptr; /*Seg fault here */
/* Copy master account into a new temporary account */
Account temporary_account;
strcpy(temporary_account.number,master_account.number);
strcpy(temporary_account.description,master_account.description);
}
正在创建主列表,然后是临时副本。
GSList *master_account_list = read_account_numbers(); /* This statment works correctly, producing a GSList with four accounts. */
GSList *temporary_account_list = g_slist_copy_deep(master_account_list, (GCopyFunc) build_temporary_list, NULL);
如上所述,我在尝试检索当前主帐户时遇到段错误。
追问:我成功初始化一个新的临时账户后,如何添加到已复制的临时账户列表中?
g_slist_copy_deep()
在每个列表项上调用提供的复制函数,更具体地说是在项目的数据上。您在此处拥有的复制功能将两个功能签名都弄错了, 和 没有 return 任何东西。
您的用例的可能示例如下:
gpointer build_temporary_list(gpointer item, gpointer user_data) {
Account *master_account = item;
/* Copy master account into a new temporary account */
Account* temp_account = g_new (Account, 1);
strcpy(temp_account->number, master_account->number);
strcpy(temp_account->description, master_account->description);
return temp_account;
}
寻求有关使用 g_slist_copy_deep
复制 GSList
的帮助。
我有一个 GSList
银行账户结构(帐号和描述),我想使用 g_slist_copy_deep
将那个 GSList
复制到另一个 GSList
。我的复制功能出现段错误。
首先是结构定义。
typedef struct Accounts {
gchar number[100];
gchar description[500];
} Account;
接下来是复制功能。
GCopyFunc build_temporary_list(gpointer master_account, gpointer user_data) {
/* Retrieve current master account */
GSList *master_account_ptr = (GSList *)master_account_list;
Account * account_ptr = (Account *)master_account_ptr->data;
Account master_account = *account_ptr; /*Seg fault here */
/* Copy master account into a new temporary account */
Account temporary_account;
strcpy(temporary_account.number,master_account.number);
strcpy(temporary_account.description,master_account.description);
}
正在创建主列表,然后是临时副本。
GSList *master_account_list = read_account_numbers(); /* This statment works correctly, producing a GSList with four accounts. */
GSList *temporary_account_list = g_slist_copy_deep(master_account_list, (GCopyFunc) build_temporary_list, NULL);
如上所述,我在尝试检索当前主帐户时遇到段错误。 追问:我成功初始化一个新的临时账户后,如何添加到已复制的临时账户列表中?
g_slist_copy_deep()
在每个列表项上调用提供的复制函数,更具体地说是在项目的数据上。您在此处拥有的复制功能将两个功能签名都弄错了, 和 没有 return 任何东西。
您的用例的可能示例如下:
gpointer build_temporary_list(gpointer item, gpointer user_data) {
Account *master_account = item;
/* Copy master account into a new temporary account */
Account* temp_account = g_new (Account, 1);
strcpy(temp_account->number, master_account->number);
strcpy(temp_account->description, master_account->description);
return temp_account;
}