簡體   English   中英

如何在C ++中刪除此2D數組

[英]How to delete this 2D Array in C++

我完全不知道為什么析構函數中的刪除代碼無法正常運行。 我希望你們能為此提供幫助。

非常感謝!

class Array2D
{
      public: 
      Array2D();
      Array2D(int,  int);
      ~Array2D();

      private:
      int row;
      int col;
      int **p;
};

Array2D::Array2D()
{
      // Default Constructor
}


Array2D::Array2D(int rows, int cols)
{
     this -> row = rows;
     this -> col = cols;

     p = new int* [row]; 
     for(int i=0; i< row; i++)
          p[i] = new int[col];

     // Fill the 2D array
     for (int i = 0; i < row; i++)
          for (int j = 0; j < col; j++)
          {
               p[i][j] = rand () % 100;
          }
}    


Array2D::~Array2D()
{
     // I'm using this way to delete my 2D array.
     // however, it won't work!

     for (int i = 0; i < row; i++)
     {
          delete[]p[i];
     }
     delete[]p;
}

您沒有在默認構造函數中初始化任何東西。 這意味着析構函數將對默認的構造對象發狂。 您也不會禁用不能與您的類一起使用的復制構造函數,因為如果您復制了一個對象,它將嘗試兩次刪除同一張表。 例如,如下更改

class Array2D
{
      public: 
      Array2D();
      Array2D(int,  int);
      ~Array2D();

      private:
      int row;
      int col;
      int **p;

      void initialize(int rows, int cols);

      // disable copy functions (make private so they cannot 
      // be used from outside).
      Array2D(Array2D const&);
      Array2D &operator=(Array2D const&);
};

Array2D::Array2D()
{
     initialize(0, 0);
}


Array2D::Array2D(int rows, int cols)
{
     initialize(rows, cols);
}    

void Array2D::initialize(int rows, int cols) {
     this -> row = rows;
     this -> col = cols;

     p = new int* [row]; 
     for(int i=0; i< row; i++)
          p[i] = new int[col];

     // Fill the 2D array
     for (int i = 0; i < row; i++)
          for (int j = 0; j < col; j++)
          {
               p[i][j] = rand () % 100;
          }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM