尽管调用delete []仍未释放​​内存

时间:2018-01-29 16:21:35

标签: c++ memory-management heap-memory

这是一个非常奇怪的错误。我花了一些时间试图解决它,但我只是迷失了。

我有一个递归函数,实现了一种Minimax算法。 ChessBoard对象通过链接到前一个和下一个移动而实现到树中。但这不是问题所在。

因为整棵树占用了大量内存,所以我想实现类似于视频压缩的IFrame和PFrame设计的东西。每个电路板可以处于以下两种状态之一:IFrame当它将所有部件的数组存储在它们的位置时(这将更快地分析电路板的位置),PFrame是它只存储的时候前一个位置和它自身之间的差异(它应该在内存中占用更少的空间,假设只有4个单元格会改变,而且只有在进行转换时)。我有两种方法:

void ChessBoard::makeIFrame()
{
    if(!board)
    {
        //++chessBoardArrayCreateCount;
        board = new ChessPiece[param.cellCount];
        std::copy(from->board, from->board+param.cellCount, board);
        for(size_t i=0; i<4; ++i)
        {
            if(changes[i].pos==param.cellCount)
            {
                break;
            }
            board[changes[i].pos] = changes[i].piece;
        }
    }
}

void ChessBoard::makePFrame()
{
    if(board)
    {
        //++chessBoardArrayDeleteCount;
        delete[] board;
        board=nullptr;
    }
}

我可以确认已执行makePFrame方法,但我可以看到它对适合内存的对象数没有影响。

我不确定这是否重要,但进行计算的过程是在一个单独的std::thread中进行的,但是当从其他任何地方进行计算时,我从不操纵董事会的状态。

0 个答案:

没有答案