C 如何检查内存泄漏
我写了一个AI,它使用maxmin算法来玩游戏。基本上,我在这一点上要深入一层。我想我有内存泄漏,但我不知道如何追踪它。我使用了gdb,但它没有帮助 这就是正在发生的事情: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
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>