我正在用 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;
類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[]
會跟蹤所有指標,但我的偏執變得更好了。如果類Piece
有一些構造的類,它會導致記憶體泄漏,即
class Piece
{
bool isBlack;
std::vector<std::string> figure_type;
public:
Piece() {};
?
uj5u.com熱心網友回復:
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;
這會導致記憶體泄漏嗎?
不會。這不會導致記憶體泄漏。
分配動態記憶體時記憶體泄漏,并丟失指向該動態記憶體的指標,因此無法再釋放動態記憶體。所示程式不分配任何動態記憶體(通過向量成員除外,但向量類注意不泄漏它管理的記憶體)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/440076.html