为什么这段代码有内存泄漏
Why this code has memory leakage?
我检查了每一行,但找不到忘记删除的地方。我在这个网站上找到了AllocateDynamicArray
和FreeDynamicArray
代码,并假设它是正确的。我将尽快提供瓦尔格林德输出。任何帮助将不胜感激。
template <typename T>
T **AllocateDynamicArray(int nRows, int nCols) {
T **dynamicArray;
dynamicArray = new T*[nRows];
for (int i = 0; i < nRows; i++) {
dynamicArray[i] = new T [nCols];
for (int j = 0; j < nCols; j++) {
dynamicArray[i][j] = 0;
}
}
return dynamicArray;
}
template <typename T>
void FreeDynamicArray(T** dArray, int nRows) {
for (int i = 0; i < nRows; i++) {
delete[] dArray[i];
}
delete[] dArray;
}
int main(int argc, char* argv[]) {
int numOfComps = 1;
int** input = AllocateDynamicArray<int>(rowNo, 4);
while (calculateAvgTime(false) > maxAvgTime) {
numOfComps++;
}
FreeDynamicArray(input, rowNo);
return EXIT_SUCCESS;
}
double calculateAvgTime(bool print) {
double waitingTime = 0;
int* computers = new int[numOfComps];
for (int i = 0; i < numOfComps; i++) {
computers[i] = 0;
}
int** infoList = AllocateDynamicArray<int>(numOfComps, 2);
//some code related to computers and infoList
double waitingTime /= (double) (rowNo);
FreeDynamicArray(infoList, numOfComps);
delete[] computers;
return waitingTime;
}
以下是瓦尔格林德的输出。
==21109==
==21109== HEAP SUMMARY:
==21109== in use at exit: 1,344 bytes in 4 blocks
==21109== total heap usage: 72 allocs, 68 frees, 11,752 bytes allocated
==21109==
==21109== 336 bytes in 1 blocks are definitely lost in loss record 1 of 2
==21109== at 0x4C28D27: operator new[](unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==21109== by 0x402159: Heap::Heap(int) (in /home/cs/c_turhan/bin/HW3/simulator/simulator)
==21109== by 0x401977: calculateAvgTime(bool) (in /home/cs/c_turhan/bin/HW3/simulator/simulator)
==21109== by 0x401792: main (in /home/cs/c_turhan/bin/HW3/simulator/simulator)
==21109==
==21109== 1,008 bytes in 3 blocks are definitely lost in loss record 2 of 2
==21109== at 0x4C28D27: operator new[](unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==21109== by 0x402159: Heap::Heap(int) (in /home/cs/c_turhan/bin/HW3/simulator/simulator)
==21109== by 0x401977: calculateAvgTime(bool) (in /home/cs/c_turhan/bin/HW3/simulator/simulator)
==21109== by 0x401724: main (in /home/cs/c_turhan/bin/HW3/simulator/simulator)
==21109==
==21109== LEAK SUMMARY:
==21109== definitely lost: 1,344 bytes in 4 blocks
==21109== indirectly lost: 0 bytes in 0 blocks
==21109== possibly lost: 0 bytes in 0 blocks
==21109== still reachable: 0 bytes in 0 blocks
==21109== suppressed: 0 bytes in 0 blocks
==21109==
==21109== For counts of detected and suppressed errors, rerun with: -v
==21109== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 6 from 6)
在calculateAvgTime
中,你在computers
中分配一个数组,但你只释放了一个项目。每当使用new[]
时,请使用delete[]
。
更好的是,只需使用vector
并观察该程序的内存管理问题消失。
我没有看到定义"rowNo"的位置,因此可能存在"FreeDynamicArray()"未删除所有内存的问题,此外,如果您使用的是VS,请尝试获取视觉泄漏检测器(此处),它将帮助您跟踪泄漏的内存并帮助您查明错误。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏