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