malloc分配内存失败解决方法

malloc分配内存失败
同一个函数第一次调用,返回结果正确,第二次调用就出现Unhandled Exception......Access Violation访问内存错误了。

void Classify(BandSet* bandset, double** ClassifyMatrix)
{
    ......
    double dPlants = Mahalanobis(Plants_Avg,Plants_Cov,Plants_Pw,x);//第一次调用,返回结果正确
    double dWater = Mahalanobis(Water_Avg,Water_Cov,Water_Pw,x);   //第二次调用出错
    ......
}
//计算马氏距离
double Mahalanobis(double* avg, double** cov, double Pw, double* x)
{
int i,j;
double d = 0;
double sum = 0;

//计算协方差的逆阵
double** E_inv = (double**)createMatrix(nBand,nBand);  //出错时,调试定位到这里
E_inv = MatrixInverse(cov,nBand);

//计算三个矩阵的内积,得到第一项item1
double temp[nBand] = {0.0};
for (i=0;i<nBand;i++)
{
for (j=0;j<nBand;j++)
{
sum += (x[j]-avg[j])*E_inv[i][j];
}
temp[i] = sum;
}
double item1 = 0;
for (i=0;i<nBand;i++)
{
item1 += temp[i]*(x[i]-avg[i]); 
}
item1 = item1 * (-0.5);
//freeMatrix(E_inv,nBand,nBand);
//计算第二项item2
double item2 = log(Det(cov,nBand));
item2 = item2 * (-0.5);

//计算第三项item3
double item3 = log(Pw);

//计算最终的马氏距离d
d = item1 + item2 + item3;
return d;
}
 
//创建一个m行n列的矩阵
int** createMatrix(int m, int n)
{
int** Matrix;
int i;
    Matrix = (int **) malloc(sizeof(int *) * m);
    for(i = 0; i < m; i++)
    {
            Matrix[i] = (int *) malloc(sizeof(int) * n);//进一步调试,错误定位到这里
    }
    return Matrix;
}


有谁知道这是什么原因吗?是这句double** E_inv = (double**)createMatrix(nBand,nBand);类型转换后,E_inv矩阵没有释放内存的原因吗?
------解决思路----------------------
内存是按int[m][n]大小申请的,不要强制转换为double [m][n], 两者并不兼容。 
------解决思路----------------------
引用:
内存是按int[m][n]大小申请的,不要强制转换为double [m][n], 两者并不兼容。 


由此可能引起越界访问,个种问题都可能发生。 
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

内存是按int[m][n]大小申请的,不要强制转换为double [m][n], 两者并不兼容。 


由此可能引起越界访问,个种问题都可能发生。 


我的程序需要大量地动态创建int 型和double型矩阵,那有什么好的方法没呢?

你需要double [m][n],就申请 double[m][n], 不要申请 int[m][n]