指针向量的Push_back方法导致崩溃C ++

时间:2016-02-16 20:44:21

标签: c++ pointers vector crash push-back

我试图在C ++中添加指向矢量的指针。就这样:

          Puzzle * puzzleStart = new Puzzle();

          std::vector<Puzzle*> OPEN;

          OPEN.push_back(puzzleStart);

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

更新:你是对的,问题出在其他地方,我只是意识到它是在我释放指针向量时发生的。还有另一个问题,如果向量包含我认为的指针的重复性。

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

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

3 个答案:

答案 0 :(得分:0)

你是对的,问题出在其他地方,我只是意识到它是在我释放指针向量时发生的。还有另一个问题,如果向量包含我认为的指针的重复性。

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

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

答案 1 :(得分:0)

如果问题是重复指针,则应考虑不允许复制的容器,例如集合。 E.g:

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();

答案 2 :(得分:0)

删除指针时,将其设置为nullptr。删除空指针不会导致崩溃。