当 malloc 变量也已分配给另一个变量时,我应该如何释放它? (C语言)

How should I free a malloc variable when it has been assigned to another variable as well? (C Language)

抱歉,如果有人问过这个问题。

我有这个程序:

int main()
{
  int *X = (int *) malloc(sizeof(int));
  *X = 10; 
  int *Y = X;
  free(Y);

  return 0;
}

我不知道代码是否正确。我还需要像为 X 调用 malloc() 那样调用 free(X) 吗?我是否也需要为 Y 调用 malloc(),或者 Y 就这样好吗?

此代码不正确,因为未包含所需的 header stdlib.h 并且未检查 malloc() 的结果。 malloc() 在 C 中的转换结果也是 discouraged.

正确的代码是:

#include <stdlib.h>

int main(void)
{
  int *X = malloc(sizeof(int));
  if (X == NULL) return 1;
  *X = 10;
  int *Y = X;
  free(Y);

  return 0;
}

您不需要也不能调用 free(X); 因为 X 指向与 Y 相同的点并且内存已经被 free(Y); 释放.

如果您希望 Y 指向与 X 不同的(新)事物,则需要为 Y 调用 malloc()。在这种情况下,建议释放 XY 所指向的内容。 (释放将满足像 Valgrind 这样的检查器,但在现代 OS 中你不必在程序执行结束时释放东西,因为 OS 将释放你进程中使用的所有内存。有关更多信息,参见 c - What REALLY happens when you don't free after malloc? - Stack Overflow)

你不需要关心变量。你只需要关心分配的内存块。

您的代码没问题(除了缺少 headers) 您分配一个块并再次释放同一个块。就是这样。

如果您为 Y 添加另一个 malloc,您将在分配 X 的值时导致内存泄漏。如果你添加 free(X) 你释放同一个块两次,这是非法的。

注意:您必须知道,在 free(Y) 之后,您将无法访问 *X,因为内存不再属于您。

How should I free a malloc variable when it has been assigned to another variable as well? (C Language)

您不需要释放声明的变量(指针)XY。它们具有自动存储期限,当控件退出声明变量的范围时,将由编译器自动释放。

您需要释放此声明中动态分配的内存

int *X = (int *) malloc(sizeof(int));

内存已分配一次,也应释放一次,具体取决于有多少指针指向分配的内存。

在此声明之后

int *Y = X;

两个指针,XY,现在指向分配的内存。

要释放分配的内存,您可以使用任一指针,例如

free( X );

free( Y );

在这样的调用之后,两个指针都是悬挂指针。通常将此类指针设置为 NULL.

是个好主意
X = NULL;
Y = NULL;