0

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);
}
4

3 回答 3

3

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

于 2012-08-18T13:06:02.310 回答
1

假设字符串是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);
/***********************************************************/
于 2012-08-18T13:11:22.780 回答
0

好像我忘记了一个

PQclear(res);

在代码更深的地方,我调试得还不够远。

于 2012-08-21T18:29:27.350 回答