由于for循环中的向量,此代码导致内存泄漏。我目前意识到可以通过不在C ++中使用指针来避免这种情况。但是,我需要在代码中使用指针。这是我在C中的实际代码的等效(概念证明),其中我没有其他选项,但使用指针。我使用C ++来解决我的问题,因为它使得它更容易可视化。在我的实际代码中,我使用了来自TreeMap
库的vector
而不是HashMap
和queue
而不是Libgee
。我不会写出我的实际代码,因为要理解它,我必须发布超过一千行代码,这使我的问题变得不可行。这是一个缩小的等价物,它以编程方式导致相同的内存泄漏问题并具有相同的逻辑。最后,我将使用队列(我的代码中的HashMap),直到用户决定再次运行循环来获取新值。我不能在循环之外声明containerVector
的原因是每个{i}迭代需要每个containerVector
不同。
TL;在循环外部需要在for循环内创建的DR变量,但引用会丢失并导致内存泄漏。变量需要作为指针。
在使用指针时,有没有办法避免内存泄漏?我事先并不知道我需要多少向量(这里代表我的C代码中的TreeMap),并且必须将它们创建为for循环中的指针。
#include <time.h>
#include <cstdlib>
#include <vector>
#include <queue>
using namespace std;
int main()
{
srand(time(NULL));
queue< vector<int>* >* containerQueue = new queue< vector<int>* >;
// Unknown for loop size before running program
for (int i = 0; i < rand() % 1000 + 10000; i++) {
vector<int>* containerVector = new vector<int>;
// Unknown nested loop size before running the program
for (int j = 0; j < rand() % 100 + 50; j++) {
// If a condition is met
if (j % 2) {
// Add a value to the vector
containerVector->push_back(j);
}
}
// Release memory pointed by containerVector if it was not used
if (containerVector->empty()) delete containerVector;
// Add the vector to the queue
containerQueue->push(containerVector);
// If containerVector were to be freed here, the memory leak issue is solved,
// But containerQueue would then become useless
}
// Use containerQueue here
// The values of containerVector are needed in this part of the code
return 0;
}