【发布时间】:2017-02-07 10:45:01
【问题描述】:
所以我知道这个问题很可能以前被问过,但经过近一个小时的搜索后,我决定问同样的问题。向我指出一个已经回答的重复问题将不胜感激。
然后,用基本的 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} 留在内存中。这样可以吗?
非常感谢您的帮助!
【问题讨论】:
-
注意:VLA 不能有初始化列表。还有
p_arr = &arr;-->p_arr = arr;但这会导致内存泄漏。 -
@BLUEPIXY .. 是的,我同意,我在创建 MWE 时有点太快了,但这不是重点。不过,我已经更正了拼写错误以及其他一些拼写错误。