我正在尝试释放使用以下代码分配的第二个数组:

int** createMatrix(int k)
{
    int i;
    int **res;

    res = (int**)malloc(sizeof(int*)*k);
    checkalloc(res);

    for (i = 0; i < k; i++)
    {
        res[i] = (int*)malloc(sizeof(int)*k);
        checkalloc(res[i]);
    }
    return res;
}

具有以下功能
void freeMatrix(int ***matrix, int k)
{
    int i;

    for (i = 0; i < k; i++)
        free(matrix[i]);

    free(matrix);
}

第一个元素被很好地释放,但是当i=1函数崩溃时出现错误:
First-chance exception at 0x0f7e7e2c (msvcr100d.dll) in Q2.exe: 0xC0000005: Access violation reading location 0xccccccc8.
Unhandled exception at 0x0f7e7e2c (msvcr100d.dll) in Q2.exe: 0xC0000005: Access violation reading location 0xccccccc8.

我做错什么了?
编辑:
当尝试解除分配由以下人员分配的类似数组时,我也会遇到同样的情况:
CHARS** createImageMatrix(FILE *fp, int rows, int cols, int format)
{
    CHARS**res;
    int i;

    res = (CHARS**)malloc(sizeof(CHARS*)*rows);
    checkalloc(res);

    for (i = 0; i < height; i++)
    {
        res[i] = (CHARS*)malloc(sizeof(CHARS)*cols);
        checkalloc(res[i]);
    }
    return res;
}

以及处理:
void freeCharsMatrix(CHARS **matrix, int rows)
{
    int i;
    for (i = 0; i < rows; i++)
        free(matrix[i]);
    free(matrix);
}

当CHARS是:
typedef struct Chars {
char A;
char B;
char C;
char D;

}字符;
但这次我得到:
我怎么了?

最佳答案

void freeMatrix(int ***matrix, int k)

==>

void freeMatrix(int **matrix, int k)

编辑:
free(matrix+i) // when you do this the pointer across the whole array .

==>
free(matrix[i])

关于c - 尝试取消分配2D数组时的访问冲突读取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18367822/

10-11 22:10
查看更多