Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何检查内存泄漏_C_Memory Leaks - Fatal编程技术网

C 如何检查内存泄漏

C 如何检查内存泄漏,c,memory-leaks,C,Memory Leaks,我写了一个AI,它使用maxmin算法来玩游戏。基本上,我在这一点上要深入一层。我想我有内存泄漏,但我不知道如何追踪它。我使用了gdb,但它没有帮助 这就是正在发生的事情: for (i = 0; i < max_legal; i++) { AddToBoard(legal_columns[i], legal_pieces[i]); val = Min(depth - 1, legal_columns[i]); RemoveFromBoard(legal_colum

我写了一个AI,它使用maxmin算法来玩游戏。基本上,我在这一点上要深入一层。我想我有内存泄漏,但我不知道如何追踪它。我使用了gdb,但它没有帮助

这就是正在发生的事情:

for (i = 0; i < max_legal; i++) {
    AddToBoard(legal_columns[i], legal_pieces[i]);
    val = Min(depth - 1, legal_columns[i]);
    RemoveFromBoard(legal_columns[i]);
    ......

}
for(i=0;i
  • legal_列
    数组有
    {1,1,2,2…12,12}
  • legal\u片段
    数组具有
    {1,3,1,3….1,3}
i=5
时,法律条款具有
{1,3,1,3,97,0}


我不知道97和0是从哪里来的。它被覆盖了吗?我怎么找到它

否。gdb对跟踪内存泄漏没有太大帮助。考虑使用,这将帮助您找到内存泄漏和其他内存相关问题(如越界访问)。
您正在使用gdb,因此我假设您正在Linux机器上运行。您可以轻松使用来跟踪内存泄漏

valgrind --leak-check=full --show-reachable=yes <your-app>
valgrind--泄漏检查=完全--显示可达性=是

您可能会找到有用的Dr.Memory。它适用于Windows和Linux。您可以下载它


使用起来有点简单。

valgrind正在运行时测试您的应用程序。如果它说没有发现错误,那就意味着在这个特定的执行过程中没有发现错误。您能粘贴您在valgrind输出中运行的命令吗?我看到更多错误。这是我使用的命令。valgrind--泄漏检查=完全--显示可到达=是/测试。看看我收到的信息。。。大小为4==19755==0x400858:Max(aiV2.c:62)==19755==by 0x400772:MinMax(aiV2.c:24)==19755==by 0x400CBB:main(aiV2.c:175)==19755==地址0x51b0368在大小为20的块alloc'd==19755==at 0x4C267CC:calloc(vg_replace_malloc.c:467)==19755==by 0x4007E8:Max(aiV2==19755==by 0x400772:MinMax(aiV2.c:24)==19755==by 0x400CBB:main(aiV2.c:175)这意味着什么?这不是内存泄漏,但您确实访问了未分配的内存(缓冲区溢出)。我发现了问题所在。我没有正确调用数组,这就是它溢出的原因。被覆盖并不一定意味着内存泄漏。请粘贴您的完整代码。
valgrind --leak-check=full --show-reachable=yes <your-app>