C++ C++;指针--奇怪的循环行为

C++ C++;指针--奇怪的循环行为,c++,pointers,C++,Pointers,在main中,我试图调用mymath.cpp中的一个素数函数——它有一些 非常奇怪的行为,我不明白。(注意,该算法不起作用 然而——但这对我来说并不奇怪。) 奇怪的是,如果我把这句话注释掉: cout << "n:" << lastPrime->pnum <<"\n"; cout代码作为一个局部变量,名为addPrime,在其生命周期之外使用: lastPrime->pprime=&addPrime; lastPrime=

在main中,我试图调用mymath.cpp中的一个素数函数——它有一些 非常奇怪的行为,我不明白。(注意,该算法不起作用 然而——但这对我来说并不奇怪。)

奇怪的是,如果我把这句话注释掉:

cout << "n:" << lastPrime->pnum <<"\n";
cout代码作为一个局部变量,名为
addPrime
,在其生命周期之外使用:

    lastPrime->pprime=&addPrime;
    lastPrime=&addPrime;
    cout << "n:" << lastPrime->pnum <<"\n";
    return true;
} // 'lastPrime' is now a dangling pointer because it holds the address
  // of 'addPrime' whose lifetime has ended.
lastPrime->pprime=&addPrime;
lastPrime=&addPrime;
cout代码已作为局部变量,名为
addPrime
,在其生命周期之外使用:

    lastPrime->pprime=&addPrime;
    lastPrime=&addPrime;
    cout << "n:" << lastPrime->pnum <<"\n";
    return true;
} // 'lastPrime' is now a dangling pointer because it holds the address
  // of 'addPrime' whose lifetime has ended.
lastPrime->pprime=&addPrime;
lastPrime=&addPrime;

cout在添加或删除无害代码时出现的问题几乎总是由错误指针造成的;有时它会覆盖一些重要的东西,有时它会覆盖一些无关紧要的东西


在这种情况下,错误指针来自于获取
addPrime
的地址并保存它。在块的末尾,
addPrime
消失,指向它的指针变为无效。

在添加或删除无害代码时出现的问题几乎总是由错误指针造成的;有时它会覆盖一些重要的东西,有时它会覆盖一些无关紧要的东西

在这种情况下,错误指针来自于获取
addPrime
的地址并保存它。在块的末尾,
addPrime
消失,指向它的指针变得无效。

谢谢——我有点理解。动态分配意味着在我释放内存之前不会重写它。本地非动态分配意味着我的内存可能会被重写,即使我有一个指向它的指针?谢谢——我有点理解。动态分配意味着在我释放内存之前不会重写它。本地非动态分配意味着我的内存可能被重写,即使我有一个指向它的指针?
    lastPrime->pprime=&addPrime;
    lastPrime=&addPrime;
    cout << "n:" << lastPrime->pnum <<"\n";
    return true;
} // 'lastPrime' is now a dangling pointer because it holds the address
  // of 'addPrime' whose lifetime has ended.