有人可以解释我如何释放此代码中分配的所有内容?
我收到“分段错误”错误,我不明白我没有在这里释放什么?

void FreeMatrix(int*** matrix, int row) {
    for (int i = 0; i < row; i++) {
        free((*matrix)[i]);
    }
    free(*matrix);
}


int main() {
    AddColumn(a, size1, &size2, newCol, size1);
    PrintMatrix(*a, size1, size2);
}


谢谢您的帮助。
我必须问如何释放我分配的所有内容,代码是否有效。我尝试了很多方法来解决此问题,但我不知道该怎么做,因此,我会很高兴获得你们中一个的帮助。

最佳答案

之所以发生此问题,是因为您在创建矩阵size2后将变量b的值更改为初始值size2作为行数,然后更改了矩阵b

int size1 = 2, size2 = 3, size3 = 2;


那么您正在做:

BuildMatrix(b, size2, size3);


这将创建尺寸为3 x 2的矩阵AddColumn()
之后,您将执行以下操作:

AddColumn(a, size1, &size2, newCol, size1);


size2中,您要更改column变量的值:

void AddColumn(int*** matrix, int row, int* column, int* newCol, int rows) {


指针size2保存AddColumn()的地址,在size2中,1的值增加size2

(*column)++;


现在4的值为b

释放矩阵size2时,您要将4的新值(即FreeMatrix())传递给FreeMatrix()

FreeMatrix(b, size2);


for中,4循环迭代b次,但是矩阵3具有free()行:

for (int i = 0; i < row; i++) {
    free((*matrix)[i]);
}


在第四次迭代中,一些无效值作为指向的指针传递。这是未定义的行为,您遇到的是细分错误。

10-04 11:42