je crée un clone de minecraft, mais j'ai une fuite de mémoire
les chunks sont alloué dans une thread pool dynamiquement
puis le pointeur est mis dans une unordered map
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void ChunkThreadPool::loop(int id) { while(running) { sf::sleep(sf::milliseconds(50)); if(threads[id].state==1) { threads[id].output = new Chunk(threads[id].input); threads[id].state=2; } } }
puis libéré
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void World::loadGenerated() { for(unsigned int i=0;i<generated.size();i++) { ivec3 pos=generated[i]->Getpos(); generated[i]->buildMesh(); chunkMap[pos]=generated[i]; clipChunkMesh(pos); generated[i]->GetMesh()->setBuffers(); } generated.clear(); }
mais j'ai une fuite de mémoire, ca prend de plus en plus mémoire quand je génère des chunks
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void World::unloadChunks(vec3 pos) { ivec3 key; for(std::pair<ivec3,Chunk*> element : chunkMap) { key=element.first; if(key.x-(pos.x/32)>3 || key.x-(pos.x/32)<-3 || key.y-(pos.y/32)>3 || key.y-(pos.y/32)<-3 || key.z-(pos.z/32)>3 || key.z-(pos.z/32)<-3) { delete element.second; chunkMap.erase(key); } } }
Quelqu'un aurai une idée?
quel serai le meilleurs moyen de debugger ca?(Windows CodeBlocks)
Partager