[英]how to free a pointer after it returned its content
这是我的代码,在调用new_double_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(....);
显然,您需要在释放它之前获取它的值,例如:
size_t return_value = *new_double_size;
free(new_double_size);
return return_value;
但是在这种情况下,您甚至不需要为新的大小分配空间……只需直接使用size_t
变量即可。
要控制变量的生存期,仅应使用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;
}
当函数退出时,变量本身不再存在。 但这无关紧要。 调用约定可确保返回值返回给调用者。 您不能做的是返回函数局部变量的地址:
int *foo( void ) {
int i = 42;
return &i;
}
在这种情况下, i
的地址可以正确返回,但是由于函数返回后i
不再存在(超出范围),因此无法以任何有意义的方式使用。
此答案的文字来自Alan Au的评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.