读书人

请问在析构函数中释放内存的有关问题

发布时间: 2012-02-15 12:09:44 作者: rapoo

请教在析构函数中释放内存的问题.
写了个求二维数组(行列相同)非对角线元素之和的程序,在析构函数中释放内存却使程序运行出错,(程序中有注释)编译时可通过的.不知为什么?请教高手!
程序如下:

#include "iostream "

using namespace std;

class MATRIX
{
private:

int num;

int *ew;

double sm;

public:

MATRIX(int *sz,int n);

~MATRIX(){delete []ew;// 就是这句有问题?

cout < < "class MATRIX was delete! " < <endl;}

void sum();

void print();
};

MATRIX::MATRIX(int *sz,int n):num(n)
{
sm=0;

ew=new int[n*n];

ew=sz;

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

for(int j=0;j <num;j++)

*(ew+i*n+j)=*(sz+i*n+j);

}

void MATRIX::sum()
{

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

for(int j=0;j <num;j++)

{
if((i==j)||(i+j==num-1))

continue;

sm+=*(ew+i*num+j);

}
}

void MATRIX::print()
{
cout < < "The matrix : " < <endl;

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

{
for(int j=0;j <num;j++)

cout < <*(ew+i*num+j) < < " ";

cout < <endl;

}

cout < < "Final result are: " < <sm < <endl;

}

int main()
{
int su1[][4]={{1,1,1,1},{1,2,2,1},{1,2,2,1},{1,1,1,1}};

MATRIX *a=new MATRIX(su1[0],4);

a-> sum();

a-> print();

delete a;

return 0;
}

[解决办法]
ew=new int[n*n];

ew=sz;

--

ew被重新赋值了

读书人网 >C++

热点推荐