Утечки памяти при использовании сложных структур данных (массив массивов массивов векторов)

У меня есть сложная структура данных, определенная как:

array<array<array<vector<arc>, 2>, n_ports + 2>, n_times> destinations;

где массив а также вектор короткие для std::array а также std::vectorn_ports и n_times unsigned intс и arc это struct:

struct node { uint port; bool pickup; uint time; };
struct arc { node destination; float cost; };

В основном, к тройке (I, J, K) где 0 <= i < n_times, 0 <= j < n_ports+2, 0 <= k < 2Я связываю вектор дуг, размер которых я не могу знать априори.

Эти векторы не создаются последовательно и не являются их элементами. push_back‘последовательно.

У меня проблема в том, что у меня гораздо больше дуг, чем должно быть, и я подозреваю, что это пережитки дуг, созданных ранее, а затем перемещенных (или скопированных?) куда-то еще, когда вектор должен был быть изменен.

Вот это самый минимальный пример того, что я делаю, что мне удалось создать, начиная с того, над чем я на самом деле работаю, и отображает проблему.

Любая помощь приветствуется. Я использую неправильную структуру данных? Должен ли я что-нибудь почистить после себя? и т.п.

1

Решение

Проблема в том, что вы получили время и порты в обратном направлении. Размеры ваших массивов: n_times для индекса порта и n_ports + 2 для индекса времени. Это, вероятно, приводит к доступу к массиву вне границ.

Помните, std::array намного лучше, чем необработанные массивы, но все равно не будет проверять границы, если вы не используете at(),

2

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

std::array не проверяет индекс за пределами границ, поэтому код имеет утечки памяти, когда у вас есть порт и индексы времени в обратном направлении.

0

По вопросам рекламы [email protected]