首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++内存管理方面的有关问题

2013-02-24 
c++内存管理方面的问题本帖最后由 yixiang2009a 于 2013-02-07 13:38:05 编辑最近在写一个线性代数计算的

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;
}

其中,JuZhen这个类是ZhenLie这个类的子类。程序运行到ZhenLie的析构函数的for循环中的那条delete语句中出错的。请各位大神帮忙看下是怎么回事,感激不尽!
调试环境是vc2012。我是搞嵌入式开发的,最终要移植到单片机上,所以最好不要用编译器里面现成的函数,单片机上带不起…… c++ delete 内存
[解决办法]
对析构函数进行下修改就可以了
template<class T>
ZhenLie<T>::~ZhenLie(void)
{
    int i;
    for(i=0;i<hang;i++)
        delete [] zhen[i];  //修改这一行
    delete zhen;
}

热点排行