C++删除二维指针 vector

标签 c++ pointers vector

我在 C++ 中遇到了 valgrind 内存泄漏。 我在 Main 函数中创建了类 Coordinate 的二维 vector 指针,并用一些随机值填充它:

vector< vector<Coordinate*> > parent_vector_coords;
parent_vector_coords.push_back(calculateCannonCoordinates(bow_x, bow_y,
    stern_x, stern_y, game, 2);

现在我需要删除指针。一种方法是这样的:

for(unsigned int i = 0; i < parent_vector_coords.size(); i++)
{
  for(unsigned int index = 0; index < parent_vector_coords[i].size(); index++)
  {
    delete parent_vector_coords[i][index];
  }
}

编辑计算大炮坐标:

vector<Coordinate*> calculateCannonCoordinates(int bow_x, int bow_y, 
    int stern_x, int stern_y, Game& game, int value)
  {
    vector<Coordinate*> coords;

    if(bow_x == stern_x)
    {
      if(bow_y < stern_y)
      {
        for(int index = bow_y; index <= stern_y; index++)
        {
          coords.push_back(new Coordinate(index, bow_x));
          game.getBoard()->getField()[index][bow_x].setValue(value);
        }
      }
      else if(bow_y > stern_y)
      {
        for(int index = bow_y; index >= stern_y; index--)
        {
          coords.push_back(new Coordinate(index, bow_x));
          game.getBoard()->getField()[index][bow_x].setValue(value);
        }
      }
    }
    else if(bow_y == stern_y)
    {
      if(bow_x < stern_x)
      {
        for(int index = bow_x; index <= stern_x; index++)
        {
          coords.push_back(new Coordinate(bow_y, index));
          game.getBoard()->getField()[bow_y][index].setValue(value);
        }
      }
      else if(bow_x > stern_x)
      {
        for(int index = bow_x; index >= stern_x; index--)
        {
          coords.push_back(new Coordinate(bow_y, index));
          game.getBoard()->getField()[bow_y][index].setValue(value);
        }
      }
    }

    return coords;
  }

但我仍然遇到由 vector 引起的内存泄漏。有人知道删除指针的正确方法吗?

最佳答案

既然还有人在看这个问题,我决定给出答案。

Coordinate里好像还有一个Pointer Object,自动实例化(当时忘了)。在释放坐标之前我没有删除那个指针。这就是导致 Valgrind 内存泄漏错误的原因。

有类似问题的大家应该考虑评论区给出的建议(智能指针等)

关于C++删除二维指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18881568/

相关文章:

c - 函数指针 : why is (*fptr)(6, 7) 与 (fptr)(6,7) 相同,如果函数是 add(int , int )

C编程: Pointer to a row of a 2D array?

c++ - OpenCV 摆脱了分配给 const 引用的麻烦?

c++ - Blas 和 Lapack 库是否有原生 C++(不是 C)接口(interface)?

c - 当你在 C 中初始化一个垃圾值时会发生什么?

c++ - 将 vector 的元素添加到无序集合

c++ - 如何计算 vector 中相等的相邻元素?

c++ - 错误 C2143 : syntax error : missing ';' before '<'

c++ - 无法使用各种 lambda 表达式初始化 std::variant

r - 在两个 R 向量中找到排序