1

我有一个复杂的数据结构定义为:

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

其中arrayvector是 and 的缩写std::arraystd::vectorn_ports 和 n_times 是unsigned ints 并且arc是 a 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

2

问题是你得到了时间和端口索引。您的数组的大小使用 n_times 作为端口索引,使用 n_ports + 2 作为时间索引。这可能导致某处的数组访问越界。

请记住,std::array它比原始数组好得多,但除非您使用at().

于 2013-07-07T16:53:54.233 回答
0

std::array不检查索引是否越界,这就是为什么当您向后设置端口和时间索引时代码会发生内存泄漏。

于 2013-07-07T17:03:13.973 回答