Почему этот цикл не обнаруживает нулевой указатель?

Итак, это мой код:

while(node) {
cout<<node->getDiameter();
node=node->stepAbove();
}

Вот эти методы:

Node* Node::stepAbove() {
return this->above;
}
int Node::getDiameter() {
return this->r;
}

но цикл while вызывает нарушение прав доступа, поскольку цикл не обнаруживает нулевой указатель. При отладке он указывает на адрес «0xcccccccc», который ничего не определил … Любое предложение, где проблема?

РЕДАКТИРОВАТЬ: Забыл опубликовать мой конструктор:

Node(int x=0) {
this->above=nullptr;
this->r=x;
}

0

Решение

Есть разница между uninitialized указатель и null указатель в C ++

struct node
{

};

int main()
{
node *n1 = 0;
node *n2;

if(!n1)
std::cout << "n1 points to the NULL";

if(!n2)
std::cout << "n2 points to the NULL";
}

Попробуйте запустить этот код, и вы увидите, что n2 указывает на NULL не будет напечатан Вы удивляетесь, почему? Это потому n1 было явно указано на ноль, но я не сделал то же самое с n2, Стандарт С ++ не определяет, какой адрес должен содержать неинициализированный указатель. И там, 0xcccccccc похоже, это адрес, который ваш компилятор выбрал в качестве режима по умолчанию для режима отладки.

3

Другие решения

В ваших конструкторах установите для полей значение NULL, которые не инициализируются параметрами конструктора, например:

Node::Node(float radius)
{
above = NULL;
r = radius;
}
1

По вопросам рекламы [email protected]