Итак, это мой код:
while(node) {
cout<<node->getDiameter();
node=node->stepAbove();
}
это методы:
Node* Node::stepAbove() {
return this->above;
}
int Node::getDiameter() {
return this->r;
}
но цикл while вызывает нарушение доступа, потому что цикл не обнаруживает нулевой указатель. При отладке он указывает на адрес "0xcccccccc", который не имеет ничего определенного... Любое предложение, где проблема?
EDIT: Забыл, чтобы опубликовать мой конструктор:
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
. В стандарте C++ не указывается, какой адрес должен содержать неинициализированный указатель. И там, 0xcccccccc
, кажется, является адресом, который ваш компилятор выбрал по умолчанию для режима отладки.
В ваших конструкторах задайте поля NULL, которые не инициализируются параметрами конструктора, например:
Node::Node(float radius)
{
above = NULL;
r = radius;
}
this->above
линии.