【发布时间】:2016-12-11 00:03:58
【问题描述】:
bool CPythonNonPlayer::LoadNonPlayerData(const char *c_szFileName)
{
DWORD dwElements;
TMobTable *pTable = (TMobTable *) zObj.GetBuffer();
for(DWORD i = 0; i < dwElements; ++i, ++pTable)
{
TMobTable *pNonPlayerData = new TMobTable;
memcpy(pNonPlayerData, pTable, sizeof(TMobTable));
m_NonPlayerDataMap.insert(TNonPlayerDataMap::value_type(pNonPlayerData->dwVnum, pNonPlayerData));
}
return true;
}
我的问题是:我做错了什么?这会泄漏大量内存。每次调用此函数后,应用程序使用量增加 10MB。
【问题讨论】:
-
任何时候你有一个
new,你需要一个delete。我没有看到你使用delete。 -
不要尝试自己使用
new和delete。这样可以避免你遇到很多麻烦和悲伤。 -
如果
map::insert失败,此代码将泄漏内存。如果您要使用map在映射中存储指向动态内存的指针,并且假设map.insert可以工作,则永远不要编写这样的代码。如果映射中的键值已经存在,那么你就有了泄漏。 -
dwElements在哪里初始化? -
不要破坏你自己的问题。这是不允许的。
标签: c++ memory-leaks