gpt4 book ai didi

c - 遍历GLib数组时出错

转载 作者:行者123 更新时间:2023-11-30 15:54:56 25 4
gpt4 key购买 nike

我在从 GArray 中检索值时遇到问题。

GArray * get_leakddata(struct memory* mem) {
struct leak_data {
char *file;
int line;
char *pointer;
size_t sz;
};

......

GArray * get_leakddata(struct memory* mem) {
GArray *leak_array = g_array_new(false, false,sizeof(struct leak_data));
g_hash_table_foreach(mem->metadata_hashtable,(GHFunc)get_leakdata_from_metadata, leak_array);
,struct leak_data *,3)->sz);

return leak_array;
}

void get_leakdata_from_metadata(char *key_address, struct metadata_record *metarec, GArray *leak_array) {
if(!get_isallocated(metarec))
return;
static int i=0;
struct leak_data * ld = (struct leak_data *) malloc(sizeof(struct leak_data));
ld->file = get_prev_file(metarec);
ld->line = get_prev_line(metarec);
ld->pointer = key_address;
ld->sz = get_metadata_recordsize(metarec);

printf("get_leakdata_from_metadata sz: %d\n",ld->sz);

g_array_append_val(leak_array,ld);

i++;

printf("get_leakdata_from_metadata 2: %d\n",g_array_index(leak_array,struct leak_data*,i)->sz);

}

打印输出:

get_leakdata_from_metadata sz: 12
get_leakdata_from_metadata 2: 1

最终我遇到了段错误

最佳答案

该数组是struct Leak_data的数组,而不是指向它们的指针。所以你的索引代码:

g_array_index(leak_array,struct leak_data*, i)->sz

是错误的。这有点令人惊讶,但 GArray 确实模拟了一个数组,而不是一个指针数组。有 GPtrArray 可以做到这一点。 :) 所以,上面应该是

g_array_index(leak_array, struct leak_data, i).sz

关于c - 遍历GLib数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12668410/

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