c-g_slist_copy_deep返回分段错误



正在寻求使用g_slist_copy_deep复制GSList的帮助。

我有一个银行账户结构(账号和描述(的GSList,我想使用g_slist_copy_deep将该GSList复制到另一个GSList。我的复制功能出现seg错误。

首先是结构定义。

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);

如上所述,我在尝试检索当前主帐户时遇到seg错误。后续问题:在我成功初始化一个新的临时帐户后,如何将其添加到复制的临时帐户列表中?

g_slist_copy_deep()对每个列表项调用所提供的复制函数,更具体地说,对该项的数据调用。这里的复制函数的函数签名都是错误的,不返回任何内容。

您的用例可能有以下示例:

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;
}

相关内容

  • 没有找到相关文章

最新更新