我只是想知道,在下面的场景中,“stringvar”使用的内存是否在method1完成执行后释放?

// Just some method
void method2(char* str)
{
  // Allocate 10 characters for str
  str = malloc(10 * sizeof(char));
}

// Just another method
void method1()
{
  char* stringvar;
  method2(stringvar);

  // Is the memory freed hereafter, or do I need to call free()?
}

我这样问,因为如果我在method1的末尾加上一个“free(stringvar)”,我会得到一个警告,即stringvar在method1内部是统一的(这是真的)。

最佳答案

不,在method1之后内存没有释放,因此会出现内存泄漏。是的,使用完内存后,您需要调用free
如果要分配内存,需要发送指向method2指针的指针。这是C语言编程中的一个常见习惯用法,特别是当函数的返回值被保留为整数状态码时。例如,

void method2(char **str) {
    *str = (char *)malloc(10);
}

char *stringvar;
method2(&stringvar);
free(stringvar);

09-15 22:34