指针数组引起的内存泄漏?

Memory leak caused by array of pointers?

我正在用 C++ 下国际象棋,方法是创建一个指向 class Piece.

的指针数组
Piece* chessboard[8][8];
Piece pieces[32];

每个有棋子的棋盘域指向数组pieces[]的一个元素,没有棋子的棋盘域指向NULL。这是棋盘初始化函数的片段:

    for (int i = 0; i < 8; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            chessboard[i][j]=NULL;
            if(i==6)
                isBlack=0;
            if(i==0 || i==7)
            {
                switch(j)
                {
                    case 0:
                    case 7: chessboard[i][j]=&pieces[tmp];
                            pieces[tmp++].setPiece(isBlack,rook);
                            break;

Class Piece 只有一个枚举器和基本类型变量:

enum Figure
{
    king,queen,rook,bishop,knight,pawn
};
class Piece
{
    bool isBlack;
    Figure figure_type;
    public:
    Piece() {};

如果一个棋子撞到另一个棋子,指针将被简单地覆盖,如下所示:

chessboard[7-(y2-'1')][x2-'a'] = chessboard[7-(y1-'1')][x1-'a'];
chessboard[7-(y1-'1')][x1-'a'] = NULL;

这会导致内存泄漏吗?我不这么认为,因为数组 pieces[] 跟踪所有指针,但我的偏执变得更好了。如果 class Piece 有一些构造的 class 会导致内存泄漏,即

class Piece
{
    bool isBlack;
    std::vector<std::string> figure_type;
    public:
    Piece() {};

?

Piece pieces[32];

chessboard[i][j]=&pieces[tmp];

chessboard[7-(y2-'1')][x2-'a'] = chessboard[7-(y1-'1')][x1-'a'];
chessboard[7-(y1-'1')][x1-'a'] = NULL;

Does this cause a memory leak?

没有。这不会导致内存泄漏。

分配动态内存时内存泄漏,并丢失指向该动态内存的指针,从而无法再释放动态内存。显示的程序不分配任何动态内存(除了通过 vector 成员,但 vector class 注意不要泄漏它管理的内存)。