请问为什么加了析构函数后程序无法正常运行

#include<iostream>

using namespace std;

class CArray

{

 int n, m;

 int** data;

public:

 CArray(){}

 CArray(int nValue, int mValue) :n(nValue), m(mValue)

 {

  data = new int* [n];

  for (int i = 0; i < n; i++)

   data[i] = new int[m];

 }

 ~CArray()

 {

  //for (int i = 0; i < n; i++)

  // delete []data[i];

  //delete[]data;

 }

 

  int* & operator [](int i)

 {

   return this->data[i];

 }

  int& operator ()(int i, int j)

  {

   return this->data[i][j];

 }

};

 

int main()

{

 int t;

 int n, m;

 int i, j;

 cin >> t;

 while (t--)

 {

  cin >> n >> m;

  CArray matrixA(n, m);

  for (i = 0; i < n; ++i)

   for (j=0;j<m;j++)

   cin >> matrixA[i][j];

  cout << "MatrixA:" << endl;

  for (i = 0; i < n; ++i)

  {

   for (j = 0; j < m; j++)

   {

    cout << matrixA(i, j) << " ";

   }

   cout << endl;

  }

  cout << "MatrixB:" << endl;

  CArray matrixB;

  matrixB = matrixA;

  for (i = 0; i < n; ++i)

  {

   for (j = 0; j < m; j++)

   {

    cout << matrixB[i][j] << " ";

   }

   cout << endl;

  }

 }

 return 0;

}

析构函数内容用注释标记,加了过后程序的循环只能运行一次,然后就退出了,交到oj上的结果是运行时异常,搜了一下也没有太懂,希望能有大佬帮忙解答,谢谢

因为你的CArray的函数只是对new的指针对象进行浅拷贝,所有对象共享了这个指针指向的空间。一旦有一个析构,就会释放zh这块共享空间,导致其它指针成为野指针了

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632