указатели — C ++ Распределение памяти, дающее мне прерванный дамп?

У меня есть деконструктор, который должен освободить указатели, которые я сделал, но он не работает так, как должен. Вот часть моего класса, которая объявляет все указатели

private:
struct Edge {
Vertex* node;
};

struct Vertex {
vector< Edge > adjList;
Vertex *path;

};

vector<Vertex*> vertices;
priority_queue< Vertex* > pq;

И иногда я объявляю новые вершины в функциях так Vertex* v = new Vertex, Мне сказали, что мне не нужно беспокоиться об удалении этих указателей. Вот моя функция, которая освобождает мою память, которая вызывается моим деконструктором

void makeEmpty( ) {
for(int i = 0; i < total; ++i)
makeEmpty( vertices[ i ] );
total = 0;
}

void makeEmpty( Vertex * & v ) {
for( int i = 0; i < v->adjList.size(); ++i ){
//delete v->adjList[ i ].node;
//v->adjList[ i ].node = nullptr;
}
if ( v->path != nullptr ) {
makeEmpty( v->path);
delete v;
v = nullptr;
}
}

Я закомментировал мой adjList потому что я экспериментировал с разными способами, как заставить это работать, но ничего не происходит. Может кто-нибудь мне помочь?

Забыл упомянуть, что все эти указатели связаны с одной и той же вершиной / узлом. Все используемые вершины / узлы находятся внутри моих вершин.

Редактировать: я получил это сработало, оказывается, я слишком усложнял вещи и просто нужно было сделать это

void makeEmpty( Vertex * & v ) {
delete v;
v = nullptr;
}

0

Решение

«Vertex* v = new Vertex Мне сказали, что мне не нужно беспокоиться об удалении этих указателей. «

Ну, они сырые указатели. Вы должны беспокоиться об их удалении. Но часто самое простое решение — поместить все свои вершины в Graph класс, пусть это все принадлежит, и не беспокойтесь о владении на уровне узла.

Все становится немного странно, если вы разрезаете графики на две части или выполняете операции, которые может быть разрезать график на две части. Но даже тогда, как правило, не так уж сложно выполнить операцию, которая извлекает новую Graph из старого Graphи перенести затронутые узлы на новый график.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector