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

标签 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;
}

最佳答案

您的函数 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;
    }
}

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;
    }
}

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

rc = create_memory_pool(&name, 1024);

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

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

关于c - 如何通过将正确的指针传递给 free() 来释放函数内分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20319046/

相关文章:

c - 停止 system() 函数中使用的一些命令

c - 将 CSV 文件读取到 C 中的二维双数组

c++ - 替换我的 C++ 程序中对 "system"的调用

Python:增量编码/腌制对象?

c - TraceFS : ioctl: inappropriate ioctl for device

objective-c - 释放 NSMutableArray 会导致 EXC_BAD_ACCESS 错误

c++ - c++ 中 vector<T> 中的内存管理

java - 多线程调用单例方法会影响局部变量吗?

c++ - 我正在尝试计算 char 数组中的内容直到空终止,但每次编译时我得到的数字都大于我的数组

c - C语言函数如何判断文件是否为elf文件?