为链接列表中的Node *分配地址?

时间:2013-10-07 09:01:32

标签: c++ pointers linked-list structure

   this is the structure of my node
    typedef struct Node{
    int x;
    Node* Next;
  };

  // in main() i can make the head pointer,and assign it to NULL i-e 

     Node* start_pointer=NULL;  //this line is in my main() function
                            // and i consider it head pointer


   void add_node(Node* start_pointer){

Node first;
cout<<"Enter the value of X\n ";
cin>>first.x;
if (start_pointer==NULL){
    start_pointer=&first;   //try to assign an address of object of its pointer
    first.Next=NULL;
    }


else {                             

    Node* temp=start_pointer;
    while (temp->Next != NULL){         //program is break at this stage  
        temp=temp->Next;}

    temp->Next=first.Next;                
    first.Next=NULL;

}

我正在为节点*分配一个地址,并尝试用' - &gt;'来捕捉它运营商可以吗? 每次当我运行add_node函数时它会执行但不幸的是它不会进入其他条件

2 个答案:

答案 0 :(得分:1)

您的代码有两个不同的错误

首先,您必须在add_node中分配新节点,而不是取局部变量的地址。

而不是这个

start_pointer=&first;
first.Next=NULL;

你应该有这个

start_pointer=new Node;
start_pointer->Next=NULL;

first的地址是错误的,因为退出函数时first会被销毁。因此start_pointer将指向已被破坏的对象,并且程序将崩溃。但是,使用new分配的对象会一直存在,直到您delete为止。

第二个错误是您的函数在start_pointer函数中更改了add_node。它不会更改start_pointer函数中的main。这两个变量可能具有相同的名称,但它们是完全不同的变量。这就是您的代码永远不会进入add_node的其他部分的原因。要更改main中的start_pointer,您需要通过在类型后添加add_node来更改&函数以使用引用。

void add_node(Node*& start_pointer){ // use a reference

现在add_node中的start_pointer是main中的start_pointer的引用,因此add_node中对start_pointer的更改将影响main中的start_pointer。

答案 1 :(得分:0)

此功能:

void add_node (Node* start_pointer) {

    Node first;
    ...
    start_pointer = &first;
    first.Next=NULL;
}

存储局部变量的地址(具有自动存储持续时间的对象),该地址仅在执行此函数期间存在。当执行超出范围时,first被破坏,指针变为无效〜&gt;如果您尝试访问此指针,则会产生 未定义的行为

可能的解决方案可能是动态分配Node

start_pointer = new Node();
start_pointer->Next = NULL;

请不要忘记在某个时候调用delete来释放这段记忆。