使用复杂的数据结构(向量数组的数组数组)时内存泄漏

Memory leaks when using complex data structures (array of array of array of vector)

本文关键字:数组 内存 泄漏 复杂 数据结构 向量      更新时间:2023-10-16

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

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

其中阵列矢量std::arraystd::vector的缩写,n_ports和n_times是unsigned int s,arcstruct:

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

基本上,对于三元组(i,j,k),其中0 <= i < n_times0 <= j < n_ports+20 <= k < 2,我将弧的向量相关联,其维度我不能先验地知道

这些矢量不是按顺序创建的,它们的元素push_back’也不是按顺序生成的。

我遇到的问题是,我发现自己的弧线比应该有的多得多,我怀疑这些是之前创建的弧线的痕迹,然后在必须调整向量大小时移动(或复制?)到其他地方。

以下是我所做的最简单的例子,我从实际工作开始,设法创建了这个例子,它显示了问题。

感谢您的帮助。我是否使用了错误的数据结构?我应该自己清理一下吗?等等

问题是时间和端口索引是向后的。您的阵列大小为n_times表示端口索引,n_ports+2表示时间索引。这可能导致某个地方的数组访问越界。

请记住,std::array比原始数组好得多,但除非使用at(),否则它仍然不会进行边界检查。

std::array不检查索引是否越界,这就是为什么当端口和时间索引向后时,代码会出现内存泄漏的原因。