2012-10-01 71 views
0

我無法從我的GArray中檢索值。遍歷GLib數組的錯誤

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 

最終我得到了賽格故障

+0

它應該真的是'struct leak_data *'調用'g_array_index'嗎? –

+0

另外,你的'get_leakddata'函數是「亂碼」。 –

回答

1

數組是struct leak_data S,不是指針到他們。所以你的索引代碼:

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

是錯的。這有點令人驚訝,但GArray確實爲一個數組建模,而不是一個指針數組。有那個GPtrArray。 :)所以,上面應該是

g_array_index(leak_array, struct leak_data, i).sz 
+0

謝謝。而我只是使用GPtrArrays,所以我確信這讓我困惑。 – user994165