glib 자료구조 중에 gptrarray 에 대해 질문 있습니다 !!
글쓴이: erich0929 / 작성시간: 목, 2014/02/20 - 10:26오후
자꾸 세그멘테이션 오류가 뜨네요.
gdb로 확인해보니 g_ptr_array_index 로 얻어온 element 포인터를 DATA * 로 캐스팅해서 필드 값을 참조할 때 오류가 났습니다.
구글링을 해도 참고할 만한 자료가 없네요..
처음 글 올려 봅니다...
도와주세요,,.,
1 #include <stdio.h> 2 #include <glib.h> 3 4 typedef struct _DATA { 5 int item; 6 char* name; 7 int price; 8 double value; 9 } DATA; 10 11 int compare_items (gpointer, gpointer); 12 void printAll (gpointer, gpointer); 13 14 DATA* data [] = {{7143, "A", 1231234, 235.5}, 15 {5231, "B", 532458, 238.75}, 16 {8751, "C", 872654, 125.47}}; 17 18 int main(void) 19 { 20 GPtrArray* a = g_ptr_array_new (); 21 g_ptr_array_add (a, data[0]); 22 g_ptr_array_add (a, data[1]); 23 g_ptr_array_add (a, data[2]); 24 25 /* g_ptr_array_sort (a, (GCompareFunc) compare_items); */ 26 DATA* temp = (DATA*) g_ptr_array_index (a, 1); 27 int k = temp -> item; 28 /* printf ("item : %d\n", temp -> item); */ 29 30 /* g_ptr_array_foreach (a, printAll, (gpointer) NULL); */ 31 32 return 0; 33 } 34 35 int compare_items (gpointer a, gpointer b) { 36 DATA* alpha = (DATA *) a; 37 DATA* beta = (DATA *) b; 38 39 return alpha->item - beta->item; 40 } 41 42 void printAll (gpointer a, gpointer b) { 43 DATA* alpha = (DATA*) a; 44 printf ("item : %d, name : %s, price : %d, value : %lf\n", alpha -> item, alpha -> name, alpha -> price, alpha -> value); 45 return; 46 }
Forums:
적으신 코드에서 14줄의 data의 우변은
적으신 코드에서 14줄의 data의 우변은 DATA*[]이 아니라 DATA[]입니다.
감사합니다~!!!
ㅠㅠ 진짜 이거 하나 때문에 세시간 삽질 했네요 ~ ^^
복 많이 받으세요~^^
Make it a better place...
댓글 달기