1

这是我的代码。我尝试 malloc 被 malloc 的元素,但我不知道如何释放它们。

char *d = "apple";
int main() {            
  char *a = malloc(10 * sizeof(char));
  char **b = &a;
  strcpy(a,d);
  printf("%c", *b[0]);
  b[0] = malloc(3 * sizeof(char));
  free(b[0]);
  free(a);
}
4

1 回答 1

1

char **b = &a;

b[0]是一样的a。所以当你这样做时

b[0] = malloc(3 * sizeof(char));

您正在用a这个新分配替换 的值。

然后free(b[0])是一样的free(a);。因此,如果您同时执行这两项操作,您将两次释放相同的内存,即两次释放。

您还泄露了分配给 的原始分配a,因为您不再有指向它的指针。您需要另一个变量来保存它,因此您可以释放它。

char *d = "apple";
int main() {            
  char *a = malloc(10 * sizeof(char));
  char **b = &a;
  strcpy(a,d);
  printf("%c", *b[0]);
  char *c = a; // save a before overwriting it below
  b[0] = malloc(3 * sizeof(char));
  free(b[0]);
  free(c);
}
于 2021-03-25T00:39:54.593 回答