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

时间:2015-09-18 03:12:48

标签: c

这是我的代码,如何在调用后释放def pullDefect (JiraKey,ComponentType): connect to jira project ‘JiraKey’ low = low pids for ‘ComponentType’ med = med pids for ‘ComponentType’ high = high pids for ‘ComponentType’ defectCount = [low, med, high] return defectCount 。我是C的初学者,所以感谢你的帮助。

new_double_size

在另一个地方,我称之为:

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;
}

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

如果要控制变量的生命周期,则只应使用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;
}

答案 2 :(得分:0)

我们无能为力,因为我们不知道Vector是什么。

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

或者至少有一个void grow_vector(Vector*vec, unsigned newsize)功能。

通常,在C中,您应该有关于memory management文档负责释放内存的文档很好的约定。通常你会创建构造函数和析构函数。

答案 3 :(得分:-1)

当函数退出时,变量本身不再存在。但那并不重要。 calling conventions确保返回值返回给调用者。你不能做的是返回一个函数局部变量的地址:

int *foo( void ) {
   int i = 42; 
   return &i;
} 

在这种情况下,i的地址被正确返回但不能以任何有意义的方式使用,因为函数返回后i不再存在(超出范围)。

这个答案的内容来自Alan Au的评论。