所以我知道这个问题很可能以前被问过,但经过近一个小时的搜索之后,我决定要求所有这些。指点我已经回答的一个dublicate问题真的会被赞赏。更改指针(C)时数组元素会发生什么?
然后,在基本的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
这是内存泄漏。请参阅:[如果我在同一个指针(C)上使用malloc两次会发生什么?](http://stackoverflow.com/questions/19435433/what-happens-if-i-use-malloc-twice-on-the- same-pointer-c) –
@BLUEPIXY ..是的,我同意,在创建MWE时我有点太快,但是这并不重要。不过,我已更正了错字以及其他一些拼写错误。 – magnus