[英]Calling member function via pointer C++, object is null?
我有一個指向 ListNode object sum_ptr
的指針,它指向sum
。 當我通過sum_ptr
調用append
方法時,我得到一個段錯誤。 查看 gdb,我看到“this”在對 append 的調用中是 0x0,這沒有任何意義。 有誰知道為什么在調用 append 方法時sum
object 將是 null ? 謝謝!
ListNode sum;
ListNode* sum_ptr = ∑
const ListNode* l1_ptr = &l1;
const ListNode* l2_ptr = &l2;
int c_over = 0;
while(l1_ptr != nullptr && l2_ptr != nullptr){
int temp_sum = l1_ptr->val + l2_ptr->val + c_over;
temp_sum = temp_sum >= 10 ? temp_sum - 10 : temp_sum;
c_over = temp_sum >= 10 ? 1 : 0;
sum_ptr->append(temp_sum);
sum_ptr = sum_ptr->next;
l1_ptr = l1_ptr->next;
l2_ptr = l2_ptr->next;
}
Append 方法:
void ListNode::append(int v){
if(this->val == INT_MIN){
this->val = v;
}
else{
ListNode *e = new ListNode();
e->val = v;
ListNode* n = this;
while(n->next != nullptr){
n = n->next;
}
n->next = e;
}
}
問題的原因如下。
您使用默認構造函數聲明了一個節點。
ListNode sum;
似乎默認構造函數將數據成員設置為nullptr
並將數據成員val
INT_MIN
next
這沒有意義)。
然后,您第一次使用指針sum_ptr
append
ListNode* sum_ptr = ∑
//...
sum_ptr->append(temp_sum);
在這種情況下,成員 function append
只是更改數據成員val
。
void ListNode::append(int v){
if(this->val == INT_MIN){
this->val = v;
}
//...
然后你在 while 循環中重新分配指針
sum_ptr = sum_ptr->next;
所以現在指針sum_ptr
的數據成員sum.next
的值等於nullptr
。 並且您在下一次調用成員 function append
時使用此 null 指針會導致未定義的行為。
還要注意例如這對語句
temp_sum = temp_sum >= 10 ? temp_sum - 10 : temp_sum;
c_over = temp_sum >= 10 ? 1 : 0;
沒有意義,因為在執行第一條語句后temp_sum
總是小於 10。所以變量c_over
總是會設置為 0。你至少需要交換這些語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.