所以我知道這個問題很可能以前被問過,但經過近一個小時的搜索之後,我決定要求所有這些。指點我已經回答的一個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