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

why free memory failed? help~该如何解决

2012-02-19 
why free memory failed?? help~~~ intCMatrix::CreateMatrix(Matrix*&M,inthei,intwid){inthMnewMatrix

why free memory failed?? help~~~

int   CMatrix::CreateMatrix(Matrix   *&M,   int   hei,   int   wid)
{
int   h;
M   =   new   Matrix;
M-> data   =   new   double   *   [hei];
if   (!(M-> data))   {
AfxMessageBox( "allocation   failure   in   CreateMatrix() ");
return   NULL;
}

for   (h=0;   h <hei;   h++)   {
M-> data[h]   =   new   double   [wid];
if   (!(M-> data[h]))   {
AfxMessageBox( "allocation   failure   in   CreateMatrix() ");
return   0;
}
}

M-> height   =   hei;
M-> width   =   wid;

return   1;
}


void   CMatrix::FreeMatrix(Matrix   *M)
{
int   h,   hei   =   M-> height;

for   (h=0;   h <hei;   h++)   {
delete   []     (M-> data[h]);
}
delete   []   (M-> data);
delete   M;
M=NULL;
}


[解决办法]
哎,vector <vector <double> > 多好。
估计你在使用matrix的时候内存越界了。
[解决办法]
if (!(M-> data[h])) {
AfxMessageBox( "allocation failure in CreateMatrix() ");
return 0;
}
彪悍的内存泄漏。。。

另外诸如 M-> data = ... 的东西应该挪到 Matrix::Matrix() 里去。
[解决办法]
int CMatrix::CreateMatrix(Matrix *&M, int hei, int wid)
{
int h;
M = new Matrix;
M-> data = new double * [hei]; // 这里没有用new []方式,所以FreeMatrix里
// delete [] (M-> data);用错了
...
}


[解决办法]
M-> data = new double *[hei]与M-> data = new double[hei]有没有区别?
[解决办法]
估计是你delete太多了,一个指针被delete俩次的话必定会挂掉,你看看你有没有delete俩个一样的地方
顶顶
[解决办法]
你到底是new出错还是delete出错?
M-> data[h] = new double [wid];
前加printf( "%p ", M-> data[h]);看看。
new出错就只有内存耗尽这个可能。
[解决办法]
M-> data = new double *[hei]与M-> data = new double[hei]有没有区别?
-------------------------------
M-> data = new double * [hei]; 等价于

typedef double* DOUBLE_PTR
M-> data = new DOUBLE_PTR[hei]; // 分配了hei个double*型指针的空间
[解决办法]
单步跟一下呀,看哪个delete出错呀

热点排行