检查指针是否为NULL并导致运行时错误

时间:2015-05-15 17:46:48

标签: c++ pointers

我在做leetcode问题https://leetcode.com/problems/add-two-numbers/

ListNode的定义是:

 // Definition for singly-linked list.
 struct ListNode {
     int val;
     ListNode *next;
     ListNode(int x) : val(x), next(NULL) {}
 };

当我检查列表是否结束时,我使用了:

int v1 = h1 == NULL? h1->val:0; // h1 is defined before: ListNode* h1 = l1;

但它返回运行时错误,但是如果我将其更改为

int v1 = h1? h1->val:0;

它被接受了。

为什么?

2 个答案:

答案 0 :(得分:10)

这行代码:

 int v1 = h1 == NULL ? h1->val : 0;

或多或少与...相同:

int v1 = 0;
if (h1 == NULL)
    v1 = h1->val;

请注意,如果h1 == NULL,则在以下行中取消引用h1时,您将展示未定义的行为

答案 1 :(得分:1)

你需要!=而不是==因为Null往往是零或假