取消分配3D阵列

时间:2015-05-12 14:00:54

标签: c++ arrays malloc free

我在C ++工作,我必须分配一个三维的双打数组。这是用于分配的代码:

cellMatrix = (double***)malloc(N*sizeof(double**));
if (cellMatrix == NULL)
{
    errorlog("Allocation Error -> CellMatric can't be created");
}
for (int k = 0; k < N; k++)
{
    cellMatrix[k] = (double**)malloc(M*sizeof(double*));

    if (cellMatrix[k] == NULL)
    {
        errorlog("Allocation Error -> *CellMatric can't be created");
    }
    for (int i = 0; i < M; i++)
    {
        cellMatrix[k][i] = (double*)malloc(B*sizeof(double));
        if (cellMatrix[k][i] == NULL)
        {
            errorlog("Allocation Error -> **CellMatric can't be created");
        }
    }
} 

分配没有任何问题。最后,当我必须取消分配&#34; cube&#34;发生了一些问题。这是代码:

for (int i = 0; i < N; i++)
{
    for (int j = 0; j < M; j++)
    {
        free(cellMatrix[i][j]);
    }
    free(cellMatrix[i]);
}
free(cellMatrix);

程序在取消分配cellMatrix [i]期间停止,打印此错误消息(Visual Studio Pro&#39; 13)

  

HOG.exe已触发断点。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

从您的错误消息中,我怀疑您在调试模式下运行并且(无意中)在free(cellMatrix[i]));行设置了断点。

根据Wyzard的建议,你可以用

分配一个连续的数组
double cellArray[] = new double[N*M*B];

并使用

将其编入索引
double& cell(int i, int j, int k) { return cellArray[i + j*N + k*N*M]; }