有人可以解释我如何释放我在此代码中分配的所有内容? 我得到“分段错误”的错误,我不明白我没有在这里释放?
PackageButtonList.Find(x => x.Index == index + 1)?.IsEnabled = false;
感谢您的帮助 我要求如何释放我分配的所有内容,代码正在运行。我尝试了很多东西来解决这个问题,我不知道怎么做,所以我很乐意为你们中的一个人提供帮助。
答案 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
次,但矩阵b
有3
行:
for (int i = 0; i < row; i++) {
free((*matrix)[i]);
}
在第四次迭代中,一些无效值作为指针传递给free()
。这是未定义的行为,在您遇到分段错误的情况下。
答案 1 :(得分:0)
关于:我得到“分段错误”的错误,我不明白我在这里没有释放什么?
不释放某些已分配的内存不会导致seg故障事件。
尝试释放一些未分配的区域会导致seg故障事件。
答案 2 :(得分:0)
分段错误意味着您的程序执行了导致其崩溃的操作,例如尝试访问受保护的内存。当你没有释放所有程序时你的程序不会崩溃,你只会看到,你没有通过像valgrind那样运行一个分析器来释放所有东西。