问题描述
所以我正在研究最大堆树,并在 C++ 上使用链接表示。 由于我无法上传代码,因为它很长,但在调试时我意识到 执行将在它为指针分配 Null 指针的表达式处停止。 例如
// if node->left_child->right_chile == NULL
node->right_child = node->left_child->right_child; // the program will exit here.
这种操作经常出现在我的代码删除方法处,所以我也想知道我是否多次分配NULL变量,它会导致错误。 例如继续上面的例子,
node->parent->left_child = node->right_child;
我试图弄清楚 NULL 指针的行为方式,但我无法完全理解。 你能帮我吗?
解决方法
你能把一个NULL指针变量赋值给一个指针变量吗?
是的。只要所分配的值已初始化,您就可以将一个指针分配给另一个指针。如果该值为空,则可以。例如,这很好:
Node* a = nullptr;
Node* b = nullptr;
a = b;
node->right_child = node->left_child->right_child; // the program will exit here.
这意味着 node
或 node->left_child
之一可能不是有效指针。其中任何一个都会导致未定义的行为。
附言不要在 C++ 中使用 NULL
宏。它已被 nullptr
淘汰。