首页 > 解决方案 > 当 malloc 变量也被分配给另一个变量时,我应该如何释放它?(C 语言)

问题描述

对不起,如果这已经被问过了。

我有这个程序:

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

  return 0;
}

我不知道代码是否正确。我还需要free(X)按我的要求打电话malloc()X?我是否也需要打电话malloc()Y还是Y可以?

标签: cmallocdynamic-memory-allocationfree

解决方案


此代码不正确,因为stdlib.h未包含必需的标头并且malloc()未检查结果。也不鼓励malloc()在 C 中转换结果。

正确的代码是:

#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);.

如果您想指向不同的(新)事物malloc(),则需要调用。在这种情况下,建议释放和所指向的内容。(释放将满足 Valgrind 之类的检查器,但在现代操作系统中,您不必在程序执行结束时释放东西,因为操作系统会释放您进程中使用的所有内存。有关更多信息,请参阅c - 当您malloc 后不释放? - 堆栈内存溢出YYXXY


推荐阅读