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

string が std::string であると仮定すると、このコードに漏れはありません。問題は、呼び出された関数の 1 つの内部にある必要があります。リークは 4 の倍数であるため、GetPlayerID を推測しています。また、タスク マネージャーを使用するよりも優れたメモリ リーク追跡ツールがあります。どの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 に答える