在这一小段代码中似乎是内存泄漏

时间:2012-08-18 13:02:08

标签: c++ memory-leaks

GetPlayerName从内存中获取播放器的名称。 GetPlayerId在数据库中找到玩家的id,​​如果找不到,则插入他。它总是返回一个整数。

每当我传递playerIDs行时,有时我的内存使用量(由taskmgr显示)会跳升4或者是其中的倍数。它似乎永远不会退缩,即使我超出了这个功能的范围。 playerID和playerName的位置始终相同。

我对这是为什么一无所知。如果有人能指出我的方向,那就太棒了。

提前谢谢你,

CX

int playerIDs[MAXPLAYERS];
for (int i = 0; i < gd.GetPlayerAmount(); i++)
{
    string playerName = gd.GetPlayerName(i);
    playerIDs[i] = GetPlayerId(playerName);
}

3 个答案:

答案 0 :(得分:3)

您显示的代码不会导致内存泄漏,但可能是您调用的函数或由于您调用的函数引起的。请求valgrind解决问题。

答案 1 :(得分:1)

假设string是std :: string,这个代码没有泄漏。问题必须在其中一个函数内部。我猜测GetPlayerID,因为泄漏是4的倍数。此外,有比使用任务管理器更好的内存泄漏跟踪工具。你在用什么IDE?

如果您使用的是MSVC,则可以通过添加以下内容来启用一些快速简单的内存泄漏检测:

#define _CRTDBG_MAP_ALLOC
#include <cstdlib>
#include <crtdbg.h>


/******************* This goes at the top of main() *******************/
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
_CrtSetBreakAlloc(-1L);
/***********************************************************/

答案 2 :(得分:0)

似乎我忘了一个

PQclear(res);

在代码中更深入,我没有进行足够的调试。