如何通过将正确的指针传递给 free() 来释放函数内分配的内存

Dee*_*pak 0 c memory-management

在函数“create_memory_pool”中,我可以分配内存池,但我不确定如何从主程序中释放它。

我想我缺少如何将正确的指针从函数传递到 free,通过它我可以释放之前分配的内存。

注意我无法更改传递给函数创建内存池的参数(不允许)。但可以改变函数内部的内容。

#include <stdio.h>
#include <stdlib.h>

typedef enum {
   false,
   true
} boolean;

boolean create_memory_pool(char *name, int size)
{
  name = malloc(size);
  if (name != NULL)
    {
      printf("malloc successful\n");
      return true;
    }
  else
    {
      printf("malloc failed\n");
      return false;
    }
}

int main()
{
  boolean rc;
  char *name;


  // case 2
  rc = create_memory_pool(name, 1024);
  free(name);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Vin*_*ira 5

您的函数create_memory_pool没有公开任何指针。

您必须将其更改为:

boolean create_memory_pool(char *name, int size)
{
  name = malloc(size);
  if (name != NULL)
    {
      printf("malloc successful\n");
      return true;
    }
  else
    {
      printf("malloc failed\n");
      return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

boolean create_memory_pool(char **name, int size)
{
  *name = malloc(size);
  if (*name != NULL)
    {
      printf("malloc successful\n");
      return true;
    }
  else
    {
      printf("malloc failed\n");
      return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的 中main,将情况 2 处的调用更改为:

rc = create_memory_pool(&name, 1024);
Run Code Online (Sandbox Code Playgroud)

你的整个案例1根本没有意义。

您应该回顾一下指针的工作原理。