使用复杂的数据结构(向量数组的数组数组)时内存泄漏
Memory leaks when using complex data structures (array of array of array of vector)
我有一个复杂的数据结构,定义为:
array<array<array<vector<arc>, 2>, n_ports + 2>, n_times> destinations;
其中阵列和矢量是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
,我将弧的向量相关联,其维度我不能先验地知道。
这些矢量不是按顺序创建的,它们的元素push_back
’也不是按顺序生成的。
我遇到的问题是,我发现自己的弧线比应该有的多得多,我怀疑这些是之前创建的弧线的痕迹,然后在必须调整向量大小时移动(或复制?)到其他地方。
以下是我所做的最简单的例子,我从实际工作开始,设法创建了这个例子,它显示了问题。
感谢您的帮助。我是否使用了错误的数据结构?我应该自己清理一下吗?等等
问题是时间和端口索引是向后的。您的阵列大小为n_times表示端口索引,n_ports+2表示时间索引。这可能导致某个地方的数组访问越界。
请记住,std::array
比原始数组好得多,但除非使用at()
,否则它仍然不会进行边界检查。
std::array
不检查索引是否越界,这就是为什么当端口和时间索引向后时,代码会出现内存泄漏的原因。
相关文章:
- unordered_map 与地图与数组 - 内存分析
- 字符指针数组内存分配
- SystemC sc_signal数组内存边界
- 在分配指向数组内存地址的指针时,为什么不必使用地址运算符?
- 指向结构的指针的 2D 数组.内存访问问题
- 连接数组,数组 1 内存消失C++
- 无法使用 GetProcessMemoryInformation 测量静态数组内存使用情况
- 2D 数组内存分配 (malloc) 返回 NULL
- 删除指针成员变量的数组内存
- C++类数组内存重新分配
- 处理静态数组内存C++的内存不足情况
- 为什么析构函数不释放数组内存?
- 获取 std::array 底层数组内存大小的最简单方法?
- C 4D数组内存Deallocation速度很慢
- char*数组内存泄漏
- 数组内存地址总是按最小到最大的顺序排列吗
- C++中的Char*数组内存分配
- 动态数组内存分配如何工作
- JNA 本机函数调用和具有双**指针/数组内存分配的结构
- 了解字符数组内存分配