在“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/