比方说,我有一个Linked list类,如下图。
struct Node {
int data;
Node* rptr;
};
class LinkedList
{
public:
Node* curr;
Node* prev;
Node* first;
Node node;
LinkedList()
{
curr = NULL;
prev = NULL;
first = NULL;
node.data = NAN;
node.rptr = NULL;
}
void push(int);
void pop();
};
void LinkedList::push(int data)
{
curr = new Node;
curr->data = data;
curr->rptr = NULL;
if (first == NULL)
{
prev = first = curr;
}
else
{
prev->rptr = curr;
curr->data = data;
prev = curr;
}
}
void LinkedList::pop()
{
Node* temp = NULL;
if (first == NULL)
{
cout << "No more Data Element\n";
}
else
{
cout << first->data<<'\n';
temp = first;
first = first->rptr;
cout << first->rptr << endl;//error on this line
delete temp;
}
}
而我的main如下
int main()
{
LinkedList l1;
l1.push(10);
l1.push(20);
l1.push(30);
l1.pop();
l1.pop();
l1.pop();
l1.pop();
l1.pop();
}
我的问题是,当我试图打印NULL的地址时,它给我一个异常。我有什么办法可以打印它,因为它打印其他地址很好,但打印这个NULL的地址就不行。
在Python中,我们可以很容易地看到,如果我们将None赋值给某个东西并打印它。那么C++是否有同样的功能呢?
这里的问题是,你没有尝试打印一个 nullptr
但你访问它并想打印结果。在你得到打印结果之前,你的程序已经出现了一个与打印完全无关的空指针异常。
first = first->rptr;
first
是一个有效的指针(而不是nullptr),并且你将它赋值给了 first
现在的内容是什么 rptr
. 在你的情况下,值为 first->rptr
是 nullptr
.
如果你想 first->rptr
再一次,你想从第一个指向的地方得到值,这是不可能的。
你之前已经检查过了 first
是有效的 ( 不是 nullptr ),但在得到新的值后,你却没有。
BTW: 你应该使用 nullptr
而不是 NULL
如果你想给指针分配一个 "0",或者与此进行比较。