gpt4 book ai didi

c - 我怎样才能释放我在这段代码中分配的所有内容?为什么会出现段错误?

转载 作者:行者123 更新时间:2023-11-30 16:36:59 25 4
gpt4 key购买 nike

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

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);
}

感谢您的帮助。
我只是问如何释放我分配的所有内容,代码正在运行。我尝试了很多方法来解决这个问题,但我不知道该怎么做,所以我将非常高兴得到你们其中一位的帮助。

最佳答案

出现此问题的原因是,您在创建矩阵 b 后更改了变量 size2 的值,其中 size2 的初始值为行。

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

那么你正在做:

BuildMatrix(b, size2, size3);

这将创建维度为 - 3x2 的矩阵 b。之后你要做的是:

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

AddColumn()中,您正在更改size2变量的值:

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

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

(*column)++;

现在size2的值为4

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

FreeMatrix(b, size2);

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

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

在第四次迭代中,一些无效值作为指针传递给free()。这是未定义的行为,在您的情况下,您会遇到段错误。

关于c - 我怎样才能释放我在这段代码中分配的所有内容?为什么会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48188861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com