指针数组引起的内存泄漏?
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 注意不要泄漏它管理的内存)。
我正在用 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 注意不要泄漏它管理的内存)。