c++使用foreach使数组为null


Node* nodes[3];
for (Node* eachNode:nodes) {
eachNode = 0; //if i try to dereference it gives seg fault
}                 // eg. *eachNode = 0;
if (nodes[0] == 0) {
cout << "Null";
} else
cout << "Not null";
cout << 'n';
Node* nodes2[3];
for (int i = 0; i < 3; ++i) { //this way works fine
nodes2[i] = 0;
}
if (nodes2[0] == 0) {
cout << "Null";
} else
cout << "Not null";

嗨,伙计们,我正在努力使数组中的所有对象都等于null。当使用for循环时,它运行良好,但当我使用foreach循环时,会中断。

我得到的输出是

不为空

我想我必须取消引用foreach循环中的节点,但这会导致seg错误。

有人知道怎么了吗?谢谢

您在数组的上编写的循环:

for (Node* eachNode:nodes) {
eachNode = 0;
}

上述循环也可以使用auto:编写

for (auto eachNode:nodes) {
eachNode = 0;
}

上述循环的问题是eachNode不是存储在数组中的指针,而是存储在循环的局部变量中的指针的副本。

如果您希望将节点设置为null,您需要对要将其设置的内存位置的引用。您可以通过使用auto&:引用数组元素来获得该引用

for (auto& eachNode:nodes) {
eachNode = 0;
}

最后一个环节可能会达到你想要的效果。

我认为你应该试试:

for(Node *&eachNode : nodes) {
eachNode = nullptr;
}

通过这种方式,您可以获得与值相反的引用,并可以将其适当地设置为nullptr

我在C++11方面不是很有经验,但我确实在这里阅读了关于这个新范围构造的更多信息。

指针通过值传递。因此,设置eachNode = 0;将更改该值,否则您将试图取消引用不是指针的对象。

相关内容

  • 没有找到相关文章

最新更新