1

次のように定義された複雑なデータ構造があります。

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

ここで、arrayvectorはand の略std::arraystd::vector、n_ports と n_times はunsigned ints andarcです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

私が抱えている問題は、本来あるべきよりも多くのアークを持っていることに気づき、これらは以前に作成されたアークの痕跡であり、ベクトルのサイズを変更する必要があったときに別の場所に移動 (またはコピー?) したのではないかと疑っています。

これは、私が実際に取り組んでいることから始めて、問題を表示するために作成した、私がやっていることの最も最小限の例です

どんな助けでも大歓迎です。間違ったデータ構造を使用していますか? 私は自分の後に何かを片付ける必要がありますか?等

4

2 に答える 2

0

std::arrayは範囲外のインデックスをチェックしません。これが、ポート インデックスと時間インデックスを逆にすると、コードでメモリ リークが発生する理由です。

于 2013-07-07T17:03:13.973 に答える