七海今天创什么 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条)

报告相同问题?

悬赏问题

  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题
  • ¥15 谁会P4语言啊,我想请教一下
  • ¥20 win11无法启动 持续蓝屏且系统还原失败,无法开启系统保护
  • ¥15 哪个tomcat中startup一直一闪而过 找不出问题
  • ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀
  • ¥50 求解vmware的网络模式问题 别拿AI回答
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码