我有一个复杂的数据结构定义为:
array<array<array<vector<arc>, 2>, n_ports + 2>, n_times> destinations;
其中array 和vector 是std::array
的缩写和 std::vector
, n_ports 和 n_times 是 unsigned int
s 和 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
,我关联了一个弧 vector ,其维度我无法先验知道。
这些 vector 不是按顺序创建的,它们的元素也不是 push_back
' 按顺序编辑。
我遇到的问题是,我发现自己的弧线比应有的多得多,我怀疑这些弧线是早先创建的弧线的痕迹,然后当 vector 必须调整大小。
Here是我设法创建的我正在做的事情的最简单的例子,从我实际从事的工作开始,它显示了问题。
感谢任何帮助。我使用了错误的数据结构吗?我应该自己清理一些东西吗?等
最佳答案
问题是您得到的时间和端口索引是倒过来的。您的数组大小为端口索引 n_times 和时间索引 n_ports + 2 。这可能导致某处的数组访问越界。
请记住,std::array
比原始数组好很多,但它仍然不会进行边界检查,除非您使用 at()
。
关于c++ - 使用复杂数据结构时内存泄漏( vector 数组的数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17514038/