C - 在外部函数中的指针数组中分配值

时间:2012-10-21 07:09:54

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

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

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()中分配了它们吗?我担心他们可能,在这种情况下,我会有更好的办法做事吗?

1 个答案:

答案 0 :(得分:1)

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

编辑:旁注。当@Ancurio指出它时,你错误地释放了malloc()返回的前一个指针后面的内存,当时realloc()上使用的realloc()无效。不要那样做。 {{1}}正常工作。)