七海今天创什么 2021-06-10 22:46 采纳率: 33.3%
浏览 19
已采纳

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

#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上的结果是运行时异常,搜了一下也没有太懂,希望能有大佬帮忙解答,谢谢

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-06-10 22:51
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示