je crée un clone de minecraft, mais j'ai une fuite de mémoire
les chunks sont alloué dans une thread pool dynamiquement
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 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 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();
}
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
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);
        }
    }
}
mais j'ai une fuite de mémoire, ca prend de plus en plus mémoire quand je génère des chunks
Quelqu'un aurai une idée?
quel serai le meilleurs moyen de debugger ca?(Windows CodeBlocks)