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)
您的函数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根本没有意义。
您应该回顾一下指针的工作原理。