如果指針設置爲NULL,則不會引用它或通過它也是NULL。這裏是一個編譯例如,當您嘗試運行它,將炸彈:如果指針設置爲NULL,則不會引用它或通過它也爲NULL
#include <string>
#include <iostream>
#define NULL 0
class Seedcoat {
public:
//Seedcoat();
std::string Name;
int Weight;
};
class Seed {
public:
//Seed();
std::string Name;
int Weight;
Seedcoat* ItsSeedcoat;
};
class Apple {
public:
//Apple();
std::string Name;
int Weight;
Seed* ItsSeed;
};
int main()
{
///////Apple Objects Begin///////
Apple MyApple;
Seed MySeed;
Seedcoat MySeedCoat;
MyApple.ItsSeed = &MySeed;
MyApple.ItsSeed->ItsSeedcoat = &MySeedCoat;
MyApple.ItsSeed->ItsSeedcoat->Weight = 2;
if (MyApple.ItsSeed != NULL) {
std::cout << "The weight of the apple seed's seedcoat is " << MyApple.ItsSeed->ItsSeedcoat->Weight <<".\n";
}
MyApple.ItsSeed = NULL;
if (MyApple.ItsSeed->ItsSeedcoat != NULL) {
std::cout << "The weight of the apple seed's seedcoat is " << MyApple.ItsSeed->ItsSeedcoat->Weight <<".\n";
}
return 0;
}
所以我的問題是:爲什麼這
MyApple.ItsSeed->ItsSeedcoat != NULL
返回true。我認爲這不會因爲ItsSeed被設置爲NULL - 但它仍然會嘗試引用ItsSeedcoat的權重值 - 然後它會因爲ItsSeed不存在而被推測爲炸彈。我意識到有很多簡單的方法可以解決這個問題 - 這個例子只是爲了展示我正在觀察的行爲。這是否值得關注? - 或者這是正常的行爲?這樣做的原因是什麼?謝謝。
除了給出的答案,你應該知道你沒有將對象設置爲NULL。您只能將指針設置爲NULL。指針不是對象。指針只指向對象。當您爲該指針賦值時,它以前指向的對象完全不受影響。 –
這是真的。我做了一個修改以澄清。 – Stepan1010
'ItsSeed'當然存在。它是一個指針,它的值是NULL。這意味着'MyApple.ItsSeed == NULL'。所以你實際做的是:'NULL-> ItsSeedcoat!= NULL'。顯然這是一個NULL指針解引用。空指針取消引用的通常結果是程序將崩潰。 –