释放一个双指针

ble*_*edi 13 c pointers

我使用双指针创建了一个二维矩阵:

int** pt; pt = (int*) malloc(sizeof(int)*10);
Run Code Online (Sandbox Code Playgroud)

我知道指针被释放了

free(ptr);
Run Code Online (Sandbox Code Playgroud)

我们如何释放双指针?

如果我们打印一些内容然后释放内存并退出程序怎么办?最终记忆是否包含我们使用的记忆或与初始记忆相同?

Att*_*ila 33

假设你有一个矩阵 mat

int** mat = malloc(10 * sizeof(int*));
for (int i=0; i<10; ++i) {
  mat[i] = malloc(10 * sizeof(int));
}
Run Code Online (Sandbox Code Playgroud)

然后你可以释放矩阵的每一行(假设你事先正确地初始化了每一行):

for (int i=0; i<10; ++i) {
  free(mat[i]);
}
Run Code Online (Sandbox Code Playgroud)

然后释放顶级指针:

free(mat);
Run Code Online (Sandbox Code Playgroud)

对于你的第二个问题:如果你分配内存并使用它,你将改变那个内存,即使你释放它也不会被"恢复"(尽管你将无法再可靠地/可移植地访问它).

注意:顶层malloc正在使用,sizeof(int*)因为您正在分配指针int,而不是ints - 大小int*int保证不相同.