指向指针混淆的指针,以及列表之间的节点传输

时间:2013-02-16 22:39:35

标签: c pointers

我在C中用一些代码段疯狂,我希望能够进行干预。我有:

typedef struct node{
int value;    
node_t *next;
node_t *prev;
} node_t;

node_t current_node;     
node_t other_list;

void transfer(node_t **ipp) 
{
  if (*ipp == NULL)
  {
     *ipp = current_node;
     current_node->prev->next = current_node->next; 
  }
  else 
  {
    (*ipp)->next = current_node;
    ipp = &(*ipp)->next;
    current_node->prev->next = current_node->next;
  }
}

int main(void)
{
 int i;
 for(i= 0; i< 10; i++)
 {
   transfer(&other_list);
   current_node = current_node->next;
 }

我现在不能从第一个列表中删除项目并将它们转移到第二个列表吗?也不应该插入最后一个节点的other_list点?

1 个答案:

答案 0 :(得分:1)

我看到两个问题:

  1. 您正在更新列表中上一个节点的“下一个”指针,但不更新列表中下一个节点的“上一个”指针。
  2. 您没有检查当前节点是否实际指向列表中的另一个元素。 current_node->prev可能是null