我有以下情况:
以下是代码:
typedef struct node_s *list_t;
typedef struct node_s {
void *el;
list_t tail;
} node_t;
list_t *list_split(list_t list, void **head)
{
if ( list ) {
*head = list->el;
printf( " &list->tail = %p", &list->tail ));
return &list->tail;
}
else {
*head = (void *)NULL;
return (list_t *)NULL;
}
}
foo()
{
void **list;
list = (void **)list_split(*list, &ent);
printf( "list = %p", list ) );
}
输出:
&list->tail = 11054a2b8
list = 1054a2b8
答案 0 :(得分:0)
完全不清楚这段代码的作用。然而,它有未定义的行为,因为变量list
未在函数foo
中初始化,但它(更确切地说是*list
)在函数list_split中进行了测试
foo()
{
void **list; // What is the value of list?
list = (void **)list_split(*list, &ent); // What is the value of *list?
printf( "list = %p", list ) );
}
list_t *list_split(list_t list, void **head)
{
if ( list ) { // What is the value of list?
//...
下次尝试提供一个简单完整的代码示例,每个人都可以测试它。
答案 1 :(得分:0)
我发现了问题:
代码在32位中运行良好。就在我将其重新编译为64位时,问题出现了。我认为这是因为没有原型,编译器假定返回4字节。
谢谢你的回答。我应该分享所有信息,但我认为它不相关。