有人可以解释我如何释放此代码中分配的所有内容?
我收到“分段错误”错误,我不明白我没有在这里释放什么?
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]);
}
在第四次迭代中,一些无效值作为指向的指针传递。这是未定义的行为,您遇到的是细分错误。