我正在使用 mapPixel 的概念创建一个地图网格(一个 2D 离散点),一个类:
class MapPixel
{
friend class Map;
protected:
int x;
int y;
float height;
float vegetation;
std::vector<const MapPixel*> neib;
...methods declaration, default constructor/destructor
其中 neib 是指向其他 MapPixels 的指针列表,与 then 相邻。
我正在使用该方法
void MapPixel::addNeib(const MapPixel* neib_)
{
neib.push_back(neib_);
}
添加指向 neiber 像素的指针以构建图形(由于边界的 neibs 少于中心像素,因此此列表取决于大小)。
我的程序是有一个带有成员的类 Map
MapPixel **pixels;
在构造函数 Map::Map() 中使用
pixels = new MapPixel*[width];
for (int i = 0; i < width; i++)
pixels[i] = new MapPixel[height];
我使用 MapPixel::addNode() 方法来构建网络(例如)
pixels[i][j].addNeib(&pixels[i][j+1]);
在 Map::~Map() 我按相反的顺序删除 MapPixel (不删除 neibs 以避免双重释放):
for (int i = 0; i < width; i++)
delete pixels[i];
delete pixels;
Valgrind 说有几个像这样的大内存泄漏:
2,509,088 bytes in 39,205 blocks are possibly lost in loss record 4,071 of 4,071
in MapPixel::addNeib(MapPixel const*) in Source/mappixel.cpp:52
1: malloc in vg_replace_malloc.c:266
2: operator new(unsigned long) in /usr/lib/libstdc++.6.0.9.dylib
3: __gnu_cxx::new_allocator<MapPixel const*>::allocate(unsigned long, void const*) in ...
4: std::_Vector_base<MapPixel const*, std::allocator<MapPixel const*> >::_M_allocate(unsigned long) in stl_vector.h:131
5: std::vector<MapPixel const*, std::allocator<MapPixel const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<MapPixel const**, std::vector<MapPixel const*, std::allocator<MapPixel const*> > >, MapPixel const* const&) in vector.tcc:271
6: std::vector<MapPixel const*, std::allocator<MapPixel const*> >::push_back(MapPixel const* const&) in stl_vector.h:608
7: MapPixel::addNeib(MapPixel const*) in mappixel.cpp:52
所有与第 52 行有关:
neib.push_back(neib_);
有谁明白这一点?现在我对是否可以使用 std::vector 来构建像素的 neibs 失去信心。