假设我有以下情况(一些粗略的伪代码):
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()中分配了它们吗?我担心他们可能,在这种情况下,我会有更好的办法做事吗?
答案 0 :(得分:1)
不,他们没有。它们一直存在,直到malloc()
返回的指针传递给相应的free()
函数。如果malloc()
函数的工作方式与自动数组相同,则没有任何意义。
编辑:旁注。当@Ancurio指出它时,你错误地释放了malloc()
返回的前一个指针后面的内存,当时realloc()
上使用的realloc()
无效。不要那样做。 {{1}}正常工作。)