C 如何在指针返回其内容后释放指针

C 如何在指针返回其内容后释放指针,c,C,这是我的代码,调用后如何释放new\u double\u size。我是C语言的初学者,所以谢谢你的帮助 size_t get_doubled_size(Vector *vtr, size_t new_size){ size_t *new_double_size = malloc(sizeof(size_t)); *new_double_size = vtr -> capacity; while(new_size > *new_double_size){

这是我的代码,调用后如何释放
new\u double\u size
。我是C语言的初学者,所以谢谢你的帮助

size_t get_doubled_size(Vector *vtr, size_t new_size){
   size_t *new_double_size = malloc(sizeof(size_t));
   *new_double_size = vtr -> capacity;
   while(new_size > *new_double_size){
     *new_double_size *= 2;
   }
   return *new_double_size;
}
在另一个地方,我称之为:

int doubled_size = get_doubled_size(....);

当函数退出时,变量本身不再存在。但这并不重要。确保返回值返回给调用方。您不能返回函数局部变量的地址:

int *foo( void ) {
   int i = 42; 
   return &i;
} 
在这种情况下,
i
的地址返回正确,但不能以任何有意义的方式使用,因为函数返回后,
i
不再存在(超出范围)


此答案的文本来自Alan Au的评论。

显然,在释放它之前,您需要获得它的值,例如:

size_t return_value = *new_double_size;
free(new_double_size);
return return_value;

但在这种情况下,您甚至不需要为新的大小分配空间。。。直接使用
size\t
变量。

我们无能为力,因为我们不知道
向量是什么

我建议使用并让每个改变或变异向量的函数返回一个新的向量,如果它以一个灵活的数组成员结束

或者至少有一个
void grow\u vector(vector*vec,unsigned newsize)
函数


一般来说,在C语言中,您应该有关于释放内存的详细约定,并记录谁负责释放内存。通常您会创建构造函数和析构函数。

当您想要控制变量的生存期时,您应该只使用
malloc
。在这种情况下,您不需要这样做,您可以写得更简单:

size_t get_doubled_size(Vector *vtr, size_t new_size)
{
     size_t new_double_size = vtr -> capacity;
     while(new_size > new_double_size)
         new_double_size *= 2;
     return new_double_size;
}

您无法更改代码当前的结构方式<需要将代码>新的\u双\u大小
返回给调用者。但为什么要动态分配内存呢?只需使用静态内存。也就是说:
size\u t new\u double\u size=blah;返回新的双\u大小
@AlanAu函数退出后不会删除它,因为它在堆栈上?当函数退出时,变量本身不再存在。但这并不重要。确保返回值返回给调用方。不能返回函数局部变量的地址:
inti;返回&i。在这种情况下,
i
的地址返回正确,但不能以任何有意义的方式使用,因为
i
不再存在(超出范围)。您没有显示所有代码。这并不能回答OP的问题OP认为您告诉他不需要释放内存,而实际上他的代码有内存leak@M.M嗯OP告诉过你的,是吗?这就是我从阅读中得到的。这个答案根本不涉及OP的代码。呼叫约定是不相关的。没有本地变量的地址。没有返回指针。OP的代码是错误的,这个答案没有指出错误,也没有建议解决办法。@M.M,但这个答案在评论中获得了三张赞成票,并且在我将其从评论转换为社区wiki之前,从OP中得到了衷心的“Thx!!!!”。顺便说一句,你可以自由改进。