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

Push_back method of vector of pointers causes crash C++

本文关键字:崩溃 C++ 方法 back 指针 向量 Push      更新时间:2023-10-16

我正在尝试向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();
       } 

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

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

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

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

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

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

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