2 qq 32742637 qq_32742637 于 2016.04.11 17:13 提问

大神帮着看一下,为什么加上delete[]arr,这句就会显示错误,不加就没事
c++

#include
#include
using namespace std;
class Array
{
private:
int **arr;
int n,m;
public:
Array(int nn, int mm);
Array(const Array &stc);
~Array();
friend Array operator+(Array a1, Array a2);
friend ostream& operator<<(ostream &,Array &a);
friend istream& operator>>(istream &, Array &a);
Array operator=(Array a1);
};
Array::Array(int nn, int mm)
{
n = nn;
m = mm;
arr = new int [nn];
for (int i = 0; i < m; i++)
{
arr[i] = new int[mm];
}
}
Array::Array(const Array &stc)
{
m = stc.m;
n = stc.n;
arr = new int
[n];
for (int i = 0; i < m; i++)
{
arr[i] = new int[m];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
arr[i][j] = stc.arr[i][j];
}
}
}
Array::~Array()
{
for (int i = 0; i < n; i++)
{
delete[]arr[i];
}
//delete[] arr; //加上这句会出错,为什么????。不加就会正常运行
}
Array operator+(Array a1, Array a2)
{
Array a(a1.n, a1.m);
for (int i = 0; i < a1.n; i++)
{
for (int j = 0; j < a1.m; j++)
{
a.arr[i][j] = a1.arr[i][j] + a2.arr[i][j];
}
}
return a;
}
Array Array::operator=(Array a1)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
arr[i][j] = a1.arr[i][j];
}
}
return *this;
}
istream& operator>>(istream & input, Array &a)
{

for (int i = 0; i <a.n ; i++)
{
    for (int j = 0; j < a.m; j++)
    {
        input >> a.arr[i][j];
    }
}
return input;

}
ostream& operator<<(ostream & output, Array &a)
{

for (int i = 0; i <a.n; i++)
{
    for (int j = 0; j < a.m; j++)
    {
        cout.width(3);
        output << a.arr[i][j];
    }
    output << endl;
}
return output;

}
void main()
{
int n, m;
cin >> n >> m;
Array arr1(n, m), arr2(n, m), arr3(n, m);
cin >> arr1;
cin >> arr2;
arr3 = arr1 + arr2;
cout << arr1<<endl;
cout << arr2 << endl;
cout << arr3 << endl;
system("pause");

}

2个回答

lxffff1990
lxffff1990   2016.04.11 17:34
已采纳
qq_32742637
qq_32742637 回复lxffff1990: 懂了。谢啦
2 年多之前 回复
qq_32742637
qq_32742637 回复lxffff1990: 懂了。谢啦
2 年多之前 回复
lxffff1990
lxffff1990   2016.04.11 17:33
qq_32742637
qq_32742637 for (int i = 0; i < m; i++) { delete[]arr[i]; } delete[]arr; 改了一下还是不对,只有输入行和列相等的时候才不会出错
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
delete加不加[]的区别
delete是我们c++中的关键字,我们都知道它和new是配套使用的,有new就有delete不然会存在内存泄漏的问题。但是我们使用过delete的同学可能会发现delete有两种形式,一种是delete [],那这两个有什么区别呢?               1、delete 释放new分配的单个对象指针指向的内存          2、delete[] 释放new分配的对象数组指针指
@ResponseBody不加 会返回404错误
今天遇到一个奇怪的问题,后端一直没有报错,也有返回数据,但是前台一直报404错误,感觉很奇怪,搞了半天也没找到怎么回事,最后对比了一下发现是少了@ResponseBody  ----------------- 没加@ResponseBody之前的错误:
laravel路由和MVC
传统的MVC中请求的一般是控制器,laravel中请求的是路由 laravel中的路由简单的说就是将用户的请求转发给相应的程序进行处理,作用就是建立url和程序之间的映射 路由请求类型get、post、put、patch、delete 基本路由: 路由文件 app/Http/routes.php get方式:
ubuntu下不加index.php无法正常访问
在一次项目中将项目迁移到Ubuntu下发现,如下链接无法正常访问 http://127.0.0.21/Home/Public/login 开启了rewrite也不行,后来经各方找资料解决      DocumentRoot "/var/www/test/"      ServerName 127.0.0.21           Options FollowSy
解决js代码中加入alert()就成功执行,不加就不对的问题!
转众多网友意见 问题:          我是做一个回车事件处理,翻页的那种,在一个页面上成功了,换到另外两个页面上就出错了。反正就是跳到1,如果加上alert(),就跳转成功。 可能情况:          这种情况一般出现在 alert() 之后的某个代码需要页面元素进入一定的状态才能使用,加上 alert() 之后,相当于页面元素有足够的时间进入一定的状态了,如果确定
Android自定义控件及属性
在开发中,现有的控件并不能完全满足我们的需求,往往需要我们去进行自定义控件的设计。 在这里我们先了解一个属性,attrs中发 format。 format有多种可选值设置: 1. reference:参考某一资源ID。 (1)属性定义: (2)属性使用: android:layout_width = "42dip" androi
servlet类中@WebServlet 报错,不变色
加上javax.servlet.annotation.WebServlet后依然是报错。解决方法:到安装tomcat的目录下找到lib,里面有个servlet-api.jar复制到目录中,Build Path一下。另外在web.xml中也可配置在&amp;lt;web-app&amp;gt;中配置  &amp;lt;servlet&amp;gt;  &amp;lt;servlet-name&amp;gt;给这个servlet配置取个名字:如 (...
C++为什么不用delete代替delete[]?
C++为什么不用delete代替delete[]? 总结:一直想不通c++为什么多此一举,呵呵,前几天给Bjarne Stroustrup大师写了一份信,第二天就收到回复了,自己再仔细琢磨了一下,终于好像弄明白了:-) 我的理解是这样的,无论new还是new[ ],C++的确知道返回的这个指针它指向多大的内存块,否则它就不可能正确地释放掉这块内存了。但是delete需要知道的不仅仅是指针指向多大的内存,而更重要的是要知道指针指向的数组中有多少个对象,知道了对象数量才能依次一一调用它们的析构函数。
在业务类中忘记加上 @Component 导致的错误
WEB项目(Spring + Struts2 + MyBatis)在JS文件中调用Action时,总是不成功但是系统也没有任何错误提示,在Action中加入的日志也没有输出,说明根本就没有进入queryForPage函数,昨天晚上找了一晚上,挨个查看相关的Java类和js文件,终于找到了问题所在:Action类使用的业务类忘记加上 @Component("srvTireStand") 这个标注了。
Q_OBJECT 宏
转载自http://www.devbean.info/2012/08/qt-study-road-2-custom-signal-slot/ 上一节我们详细分析了 connect() 函数。使用 connect() 可以让我们连接系统提供的信号和槽。但是,Qt 的信号槽机制并不仅仅是使用系统提供的那部分,还会允许我们自己设计自己的信号和槽。这也是 Qt 框架的设计思路之一,用于我们设计解耦的