c++内存管理方面的问题
本帖最后由 yixiang2009a 于 2013-02-07 13:38:05 编辑 最近在写一个线性代数计算的程序,里面有求矩阵的秩。我写的是模板类。测试的时候内置数据全部正常,用我自己写的一个“分数”的类就出错了。调试的时候发现是在函数返回的时候,在析构函数中出错的,代码如下:
template<class T>
class ZhenLie//该类是矩阵和行列式的父类
{
protected:
T ** zhen;//阵列的二维数组
int hang;//最大行数
int lie;//最大列数
public:
ZhenLie(void);//默认3*3的阵列
ZhenLie(ZhenLie &p);//复制一个阵列
ZhenLie(int h,int l);//创建一个行数为h,列数为l的阵列
void chushihua(T x);//用x初始化阵列中的所有数
T du(int h,int l);//读取第h行第l列的数据
int xie(T shu,int h,int l);//修改第h行第l列的数据
ZhenLie operator ! (void);//返回转置的阵列
void operator = (ZhenLie &p);//阵列赋值
~ZhenLie(void);
};
template<class T>
int JuZhen<T>::zhi(void)//返回矩阵的秩
{
JuZhen<T> temp(*this);
int i,zhi=hang;//假设秩为行数
temp.hangzuijian();//将矩阵化为行最简形式
for(i=hang;i>0;i--)
{
if(fei0(i) <= lie)//条件成立说明该行不全为0
break;
else
zhi--;
}
return zhi;
}
template<class T>
JuZhen<T>::~JuZhen(void)
{
}
template<class T>
ZhenLie<T>::~ZhenLie(void)
{
int i;
for(i=0;i<hang;i++)
delete zhen[i];
delete zhen;
}
template<class T>
ZhenLie<T>::~ZhenLie(void)
{
int i;
for(i=0;i<hang;i++)
delete [] zhen[i]; //修改这一行
delete zhen;
}