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);
}
答案 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);
在代码中更深入,我没有进行足够的调试。