2012-10-01 2 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 

은 결국 나는 배열이 아닌 포인터 그들에게, struct leak_data들입니다 독방 감금 오류를

+0

그것이 정말이어야한다해야한다'구조체 leak_data *''g_array_index'에 대한 호출에? –

+0

또한,'get_leakddata' 함수는 "왜곡되어"있습니다. –

답변

1

를 얻을 수 . 따라서 귀하의 색인 생성 코드 :

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

관련 문제