免费双指针[英] free a double pointer

本文是小编为大家收集整理的关于免费双指针的处理方法,想解了免费双指针的问题怎么解决?免费双指针问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我使用这样的双指针创建了一个2-D矩阵:

int** pt; pt = (int*) malloc(sizeof(int)*10);

我知道指针被释放到那个

free(ptr);

我们如何释放双重指针?

如果我们打印某些东西并后来释放了该内存并退出程序怎么办?最终内存是否由我们使用的内容组成,或者与初始记忆相同?

推荐答案

说您有一个矩阵mat

int** mat = malloc(10 * sizeof(int*));
for (int i=0; i<10; ++i) {
  mat[i] = malloc(10 * sizeof(int));
}

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

for (int i=0; i<10; ++i) {
  free(mat[i]);
}

然后释放顶级指针:

free(mat);

对于您的第二个问题:如果您分配内存并使用它,则将更改该内存,即使您释放了内存也不会"恢复"(尽管您将无法再可靠/便便地访问它) .

注意:当您分配指针到 - int s,而不是int s- int*和int*和int s时,顶级malloc正在使用sizeof(int*)> C2>不能保证相同.

其他推荐答案

如果您的矩阵不是"破烂",即所有行的长度相同,则可能需要考虑:

  1. 手动访问它,即只需将其视为1D值的值,并保留一个单独的width值.要访问( x,y )的元素使用mat[y * width + x].
  2. 如果您真的想要mat[y][x]的便利性,则可以通过对malloc()进行一次调用来改进它指向每一行.这具有一个可以免费的优势:用单个free(mat);调用.

第二种方法看起来像这样:

double ** matrix_new(size_t width, size_t height)
{
  double **p = malloc(height * sizeof *p + width * height * sizeof **p);
  double *e1 = (double *) (p + height);
  size_t i;

  for(i = 0; i < height; ++i)
    p[i] = e1 + i * width;
  return p;
}

注意:以上是未经测试的,生产代码显然应在使用p.

之前检查失败

本文地址:https://www.itbaoku.cn/post/359098.html