读书人

why free memory failed? help~该如何

发布时间: 2012-02-19 19:43:38 作者: rapoo

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出错呀

读书人网 >C++

热点推荐