所以我有一个清单:
struct list_elem {
char* key;
void* value;
struct list_elem *prev;
struct list_elem *next;
};
当我尝试从两个不同的函数中查看它的键和值但使用相同的代码尝试查看值是什么时,一个给了我正确的答案,一个没有。
我将元素添加到我的列表中,如下所示:
XPoint xpts[npts + 1];
...do stuff ...
XPoint *pointr = (XPoint*) calloc(npts, sizeof(XPoint));
pointr = &xpts;
list_insert(&w->qr_coord, data, pointr);
然后我尝试在一个函数(FunctionA)中获取这样的键和值:
void list_insert(struct list *list, char* key, const void *value) {
struct list_elem *elem = list_start(list);
while (has_next(elem)) {
XPoint pointr = (XPoint*) elem->value;
printf("%s\n", elem->key); //THIS IS RIGHT
printf("(%i,%i)\n", pointr->x, pointr->y); //THIS IS RIGHT
//more code
}
}
在另一个函数(FunctionB)中,我这样做:
struct list *qr_list = &proc->window->qr_list;
struct list_elem *elem = list_start(qr_list);
XPoint pointr = (XPoint*) elem->value;
printf("%s\n", elem->key); //THIS COMES OUT RIGHT
printf("(%i,%i)\n", pointr->x, pointr->y); //THIS IS WRONG
错误的答案给了我随机数,例如 0、2345、-129953。老实说,我不确定为什么它不再起作用,任何建议将不胜感激。
干杯