c++ - 使用复杂数据结构时内存泄漏( vector 数组的数组)

标签 c++ c++11 memory-leaks stdvector stdarray

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

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

其中arrayvectorstd::array 的缩写和 std::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_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/

相关文章:

AngularJs 内存泄漏 : scope $$watchers increase even if the watched elements are removed

c++ - 使用 C++ 的 SQLite3 检索 ID 并存储到另一个表

c++ - 在 C++11 中获取函数指针的语法

c++ - 在 C++ 的链表中搜索 NAME

c++ - 为什么 C++11 隐式删除了我的默认构造函数?

c# - 如何调试潜在的内存泄漏?

c - 在 glib dbus 中正确使用 GPtrArray 和 GValueArray

c++ - 当多个目标使用相同的源文件时,如何使用 --save-temps 保留程序集文件?

java - 线程程序规范的含义

c++ - 设备句柄