0
   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;

}

我正在为节点 * 分配一个地址并尝试使用 '->' 运算符来捕获它,可以吗?每次我运行 add_node 函数时它都会执行但不幸的是它没有进入其他条件

4

2 回答 2

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_nodestart_pointer它在功能上没有变化main。这两个变量可能具有相同的名称,但它们是完全不同的变量。这就是为什么你的代码永远不会进入 else 部分的原因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。

于 2013-10-07T09:09:26.690 回答
0

这个功能:

void add_node (Node* start_pointer) {

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

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

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

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

只是不要忘记delete在某个时候调用来释放这个内存。

于 2013-10-07T09:07:50.080 回答