我創建使用mapPixel方式的概念的圖格(點的2D離散數),一類:內存泄漏(Valgrind的)
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的指針。
我使用的方法
void MapPixel::addNeib(const MapPixel* neib_)
{
neib.push_back(neib_);
}
的指針添加到neiber像素構建的曲線圖(因爲邊界具有比中心像素少neibs,該列表尺寸依賴)。
我的做法是有一類地圖使用
pixels = new MapPixel*[width];
for (int i = 0; i < width; i++)
pixels[i] = new MapPixel[height];
我使用的方法MapPixel :: ADDNODE()在構造函數中地圖成員
MapPixel **pixels;
::地圖()建立網絡(例如)
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。
在內存泄漏的可能出現的問題,你應該給我們倆如何頁頭(新),以及如何你的dealloc(刪除)......這裏部分缺失。例如。你以相反的順序刪除MaxPixel,好吧;但你是否是像素本身?我想答案是肯定的,而且給出的答案適用。儘管如此,讓全新的/刪除代碼來看看會更好! – ShinTakezou
添加了刪除代碼。我說的不是因爲這個,因爲Valgrind並沒有抱怨新像素/新像素[我],所以我認爲這個問題不在那裏。 –
應該不是'delete []'而是? – ShinTakezou