我如何释放我在此代码中分配的所有内容?为什么这是分段错误的情况?

时间:2018-01-10 13:47:19

标签: c memory

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

PackageButtonList.Find(x => x.Index == index + 1)?.IsEnabled = false;

感谢您的帮助 我要求如何释放我分配的所有内容,代码正在运行。我尝试了很多东西来解决这个问题,我不知道怎么做,所以我很乐意为你们中的一个人提供帮助。

3 个答案:

答案 0 :(得分:0)

问题出现了,因为在创建矩阵size2并将初始值b作为行数后,您正在更改变量size2的值。

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

然后你在做:

BuildMatrix(b, size2, size3);

这将创建维度的矩阵b - 3 x 2。 在此之后你正在做:

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次,但矩阵b3行:

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

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

答案 1 :(得分:0)

关于:我得到“分段错误”的错误,我不明白我在这里没有释放什么?

不释放某些已分配的内存不会导致seg故障事件。

尝试释放一些未分配的区域会导致seg故障事件。

答案 2 :(得分:0)

分段错误意味着您的程序执行了导致其崩溃的操作,例如尝试访问受保护的内存。当你没有释放所有程序时你的程序不会崩溃,你只会看到,你没有通过像valgrind那样运行一个分析器来释放所有东西。