【问题标题】:C - allocating values in an array of pointers in outside functionC - 在外部函数的指针数组中分配值
【发布时间】:2012-10-11 08:05:53
【问题描述】:

假设我有以下情况(一些粗略的伪代码):

struct { 
  int i;
} x

main(){
  x** array = malloc(size of x pointer); // pointer to an array of pointers of type x
  int* size = current size of x // (initally 0)
  add(array, size);
}

add(x** array, int* size){ // adds one actual element to the array
  x** temp = realloc(array, (*size)+1); // increase the array size by one
  free(array);
  array = temp;

  // My question is targeted here
  array[*size] = malloc(size of x); // makes a pointer to the value 
  array[*size]->i = size;
  *size++;  
}

我的问题是:一旦 add() 完成,存储在数组中的指针的值是否会随着函数调用堆栈一起消失,因为我在 func() 中分配了它们?我担心他们可能会,在这种情况下,我会有更好的方法来做事吗?

【问题讨论】:

  • 我不认为你应该在重新分配内存后释放它..
  • @Ancurio 对自己一点更加自信,因为你是完全正确的。至少他重新分配到一个临时的而不是蒙蔽他的数组,如果重新分配失败,可能会泄漏它。他没有检查这个,但它是伪代码,它的一半在那里,所以至少是这样。

标签: c arrays pointers memory-management function-call


【解决方案1】:

不,他们没有。它们一直存在,直到malloc() 返回的指针被传递给相应的free() 函数。如果 malloc() 函数的工作方式与自动数组相同,那么它的存在将毫无意义。

编辑:旁注。当@Ancurio 指向它时,您错误地释放了malloc() 返回的前一个指针后面的内存,这在当时是无效的,因为realloc() 已在其上使用。不要那样做。 realloc() 正常工作。)

【讨论】:

  • +1:我不太清楚将指针集传递给标量常量会发生什么(int *size = size of x),但我见过奇怪的事情。我认为他的意思是int size 然后通过&size 传递它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 2011-02-24
  • 1970-01-01
相关资源
最近更新 更多