gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:40:29 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com