次のクラスである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は、thenに隣接する他のMapPixelへのポインタのリストです。
私はこの方法を使用しています
void MapPixel::addNeib(const MapPixel* neib_)
{
neib.push_back(neib_);
}
グラフを作成するためにネイバーピクセルへのポインタを追加します(境界線は中央のピクセルよりもネイバーが少ないため、このリストはサイズに依存します)。
私の手順は、メンバーでクラスマップを作成することです
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を使用してピクセルのネイブを構築できるかどうかについて自信を失いました。