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...
댓글 달기