指针向量的Push#u back方法导致崩溃C++; 我试图在C++中添加指向向量的指针。因此: Puzzle * puzzleStart = new Puzzle(); std::vector<Puzzle*> OPEN; OPEN.push_back(puzzleStart); Puzzle*puzzstart=new Puzzle(); std::矢量开放; 打开。推回(开始);

指针向量的Push#u back方法导致崩溃C++; 我试图在C++中添加指向向量的指针。因此: Puzzle * puzzleStart = new Puzzle(); std::vector<Puzzle*> OPEN; OPEN.push_back(puzzleStart); Puzzle*puzzstart=new Puzzle(); std::矢量开放; 打开。推回(开始);,c++,pointers,vector,crash,push-back,C++,Pointers,Vector,Crash,Push Back,第一次按下指针时,没有问题。第二次,它会导致崩溃。我猜问题在于向量的大小,但我不明白为什么。还有别的吗 更新:你是对的,问题在别处,我刚刚意识到它发生在我释放指针向量的时候。还有一个问题,如果向量包含两个指针,我想 if (OPEN.size()!=0){ for (int i = 0; i < OPEN.size(); ++i) { delete OPEN[i]; // Calls ~object and deallocates *tmp[i]

第一次按下指针时,没有问题。第二次,它会导致崩溃。我猜问题在于向量的大小,但我不明白为什么。还有别的吗

更新:你是对的,问题在别处,我刚刚意识到它发生在我释放指针向量的时候。还有一个问题,如果向量包含两个指针,我想

   if (OPEN.size()!=0){
       for (int i = 0; i < OPEN.size(); ++i) {
      delete OPEN[i]; // Calls ~object and deallocates *tmp[i]
       }
      OPEN.clear();
       } 
       if (OPEN.size()!=0){
           for (int i = 0; i < OPEN.size(); ++i) {
          delete OPEN[i]; // Calls ~object and deallocates *tmp[i]
           }
          OPEN.clear();
           } 
if(OPEN.size()!=0){
对于(int i=0;i

如何确保它不会试图删除所有已删除的指针?

你是对的,问题出在其他地方,我刚刚意识到它是在释放指针向量时发生的。还有一个问题,如果向量包含两个指针,我想

   if (OPEN.size()!=0){
       for (int i = 0; i < OPEN.size(); ++i) {
      delete OPEN[i]; // Calls ~object and deallocates *tmp[i]
       }
      OPEN.clear();
       } 
       if (OPEN.size()!=0){
           for (int i = 0; i < OPEN.size(); ++i) {
          delete OPEN[i]; // Calls ~object and deallocates *tmp[i]
           }
          OPEN.clear();
           } 
if(OPEN.size()!=0){
对于(int i=0;i

如何确保它不删除所有已删除的指针?

< P>如果问题是指针的重复,则应该考虑一个不允许重复的容器,例如一个集合。例如:

std::set<Puzzle*> s;
Puzzle *puzz = new Puzzle();
auto insert_result = s.insert(puzz);

if(!insert_result.second)
{
    std::cout << "\"puzz\" was a duplication. No insertion made.\n";
}

// More items inserted into s, and used, etc.

for(auto p : s)
    delete p;

s.clear();
std::set s;
拼图*puzz=新拼图();
自动插入_结果=s.insert(puzz);
如果(!insert_result.second)
{

std::cout删除指针时,将其设置为nullptr。删除null指针不会导致崩溃。

向指针向量添加简单指针不会使程序崩溃。在出现第二次崩溃之前发布崩溃消息并添加代码。可能不应该进行向量操作?当前代码在程序中tion没有任何错误(如果可能的话,您可能希望使用智能指针)。您应该将其编辑到您的问题中,而不是将其作为答案发布。是的,虽然问题不是一个向量内的复制,而是两个向量之间的共享复制,但在这种情况下如何进行?应该始终只有一个“所有者”指分配的资源,如指针。其中一个向量应是所有指针的唯一所有者,并应在清除之前将其全部删除。另一个向量不应删除其包含的指针。还必须确保删除指针后不会取消对指针的引用。如果向量包含相交的点集指针——也就是说,每一个指针都包含着另一个指针,并且都不是所有指针的明确所有者——您有一个问题,需要重新考虑您的设计。