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函数时它会执行但不幸的是它不会进入其他条件
答案 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
来释放这段记忆。