jam*_*430 2 c++ arrays 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";
Run Code Online (Sandbox Code Playgroud)
大家好,我正在尝试使数组中的所有对象都等于 null。当使用 for 循环时,它工作得很好,但是当我使用 foreach 循环时,它会中断。
我得到的输出是
不为空
无效的
我认为我必须取消引用 foreach 循环中的节点,但它会出现段错误。
有谁知道出了什么问题吗?谢谢。
您编写的循环遍历数组的值:
for (Node* eachNode:nodes) {
eachNode = 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的循环也可以使用以下方式编写auto:
for (auto eachNode:nodes) {
eachNode = 0;
}
Run Code Online (Sandbox Code Playgroud)
上述循环的问题在于,不是eachNode存储在数组中的指针,而是存储在循环的局部变量中的该指针的副本。
如果您希望将节点设置为空,则需要对要设置它的内存位置的引用。您可以通过使用以下命令引用数组元素来获取该引用auto&:
for (auto& eachNode:nodes) {
eachNode = 0;
}
Run Code Online (Sandbox Code Playgroud)
最后一段可能会做你想要的。