所以我知道这个问题很可能在之前被问过,但经过近一个小时的搜索,我决定问一切。将我指向一个已经得到回答的同意问题将非常感激。
然后,用基本的C编程,我很好奇数组元素在更改其指向别的东西时会发生什么?没有先释放它是否安全?例如,
int main()
{
const int size = 3;
int *p_arr = malloc(size * sizeof(int));
for( int i=0; i<size; i++)
p_arr[i] = i;
int arr[size] = {0,0,0};
p_arr = arr; // safe!?
// What happens to the data previously allocated
// and stored in *p_arr? Should one first call,
// free(p_arr)
// and then reallocate ..?
}
基本上,更改指针会将数据{0,1,2}留在内存中。这没关系吗?
非常感谢您的帮助!
答案 0 :(得分:2)
数据没有任何变化,除了它变得无法访问(“泄露”),因此内存永远浪费,在程序终止之前(通常)它不能用于其他任何事情。
不要这样做,泄漏记忆是非常糟糕的做法。
当你不再需要记忆时,你应该free()
。
此外,可以写下分配:
p_arr = malloc(size * sizeof *p_arr);
删除int
类型的重复,并将大小锁定为实际变量。这至少在某种程度上更安全。
答案 1 :(得分:0)
数组{0,1,2}
已经在内存中,但除非再次指向指向数组头地址的指针,否则无法获取它。