Итак, это мой код:
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;
}
Есть разница между 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
похоже, это адрес, который ваш компилятор выбрал в качестве режима по умолчанию для режима отладки.
В ваших конструкторах установите для полей значение NULL, которые не инициализируются параметрами конструктора, например:
Node::Node(float radius)
{
above = NULL;
r = radius;
}