我有一个服务器应用程序(使用QTcpServer)。 VLD内存泄漏检查显示没有内存泄漏。 但是当我从客户端向服务器发送命令时,任务管理器显示内存增量。 所以,服务器将耗尽内存。 如何找到导致此类问题的代码部分? 感谢
答案 0 :(得分:2)
当接受客户端时做一些“工作”显然你的内存使用量会增长。重要的是,当你完成“工作”时,你释放你分配的对象。如果这些是QObject派生对象,Qt将在程序出口处跟踪和删除它们,所以确实没有显示内存泄漏,但是如果在服务器启动并运行时没有删除它们,它们将保持在那里。
你可以做一些事情来减少你的内存使用量,例如不要在堆上创建对象,但是在堆栈上(这些对象会自动消失)尝试使用尽可能少的内存分配,释放已分配的内存记忆,你不需要它等等...
也许通过共享一些代码(如果它不是非常庞大)将帮助我们确定一些我们可以改进内存使用的点。
答案 1 :(得分:1)
填写这些问题,我想我能帮助你:
如果最后一个为YES,请尝试隔离使内存增加的命令 如果所有命令都增加了内存使用量,那么处理命令调度的代码就会泄漏 如果只有1个命令泄漏,则该命令正在泄漏。
一般问题:
new
分配的每个Qt对象指定了父级,并且您没有使用delete
免费?如果没有,那就是你的泄密。最后,您可以尝试在分配的非QT对象上使用HP Garbage collector。