我有一个用C ++制作的游戏服务器,最近我注意到内存数量在不断增长。
我启动服务器,然后打开任务管理器(Windows 7)并查看其内存。内存可以正常使用约20秒钟,但之后它会上升并且不会停止。
我缩小了执行此操作的代码:
for(std::vector<Door>::iterator door = myMap()->doors.begin(); door != myMap()->doors.end(); ++door){
}
我什至不需要for循环内的任何代码,这是有内存泄漏的代码。但是,内存泄漏可能是什么?这是遍历矢量对象的标准循环。
上面的代码在一个函数调用中运行,该函数调用通过单独线程上的while循环更新。如果我注释掉该代码,则内存计数很好。
编辑:myMap()定义:
Map* Player::myMap(){
if(mapList == NULL){
//cout << "mapList was NULL" << endl;
return NULL;
}
//std::map<std::string, Map*> &myMapList = *mapList;
//cout << "getting my map: " << (*mapList)["f1"]->blocks.at(0).x << endl;
return (*mapList)[strdup(room.c_str())];
}
如果需要提供其他代码,请告诉我。
现在,您已提供的定义myMap
,我可以告诉您,内存泄漏来自对的调用strdup
。此函数返回的指针应该被释放(通过调用free
),因为它调用malloc
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句