如果有两个指向同一数据结构的指针,并且有一个被删除,那么如何检查另一个是否存在?

时间:2017-03-20 12:56:13

标签: c++

这是示例代码:

Node *n1 = new Node();
Node *n2 = new Node();
Node *n3 = new Node();

qWarning() << "Setting node names";
n1->setName("N1");
n2->setName("N3");
n3->setName("N3");

qWarning() << "Creating list";
QList<Node*> list;

list << n1 << n2 << n3;

qWarning() << "List iteration:";
for (int i = 0; i < list.size(); i++){
    qWarning() << "Node:" << list.at(i)->getName();
}

if (n1 != NULL){
    qWarning() << "N1 EXISTS";
}
else{
    qWarning() << "N1 DOES NOT EXIST";
}

qWarning() << "Clearing list, CLEARING EVERYTHING";
//list.clear();

while (list.size() > 0){
    Node *n = list.first();
    list.removeFirst();
    delete n;
}

qWarning() << "Accessing nodes";

if (n1 != NULL){
    qWarning() << "N1 EXISTS";
}
else{
    qWarning() << "N1 DOES NOT EXIST";
}

问题在于打印输出的两次都是N1 EXISTS。但是,很明显,如果我在访问节点消息后尝试访问n1,程序将崩溃。如何检查n1指向哪个实际存在的数据结构?

1 个答案:

答案 0 :(得分:4)

删除指针不会删除指针本身,只会释放指针所指向的内存。删除指针后,如果尝试访问指针指向的内存位置,它将调用未定义的行为