我保證之前已經詢問過這個問題,但是我一直沒能通過搜索找到它;提前抱歉,任何裁員。C數組實例化 - 堆棧還是堆分配?
這是我的(可能是錯誤的)理解,你只有在編譯時知道對象的大小時才分配給堆棧。因此,在初始化數組的情況下,你可以做其中之一(這應該進入堆疊):
char charArray[50];
由於該數組的大小在編譯時是已知的,這應該沒有問題。
在另一方面,這(我相信)也是有效的代碼:
char anotherCharArray[someVariable + 50];
這會進入堆疊呢?我很肯定代碼段錯誤,如果你釋放()這個,所以它讓我認爲它確實,但它對我來說並不合適。同樣,當數據通過malloc分配時,必須使用free()的唯一情況是100%嗎?
在此先感謝您的幫助。
@Shookit:你需要指定你是在談論局部變量還是全局變量。 –
@PaulR如果數組是可變長度的,它不能在全局範圍內。 – 2012-10-13 15:46:22
您必須區分*自動存儲*和*堆棧*,這是存儲數據的低級方法。放置在自動存儲器中的數據也可以放置在其他地方,如寄存器中。在大小未知的本地數組(稱爲VLA:s)的情況下,編譯器可以將它放在堆棧上,也可以在堆上分配內存(只要它在合適的位置釋放它)。事實上,VLA與'setjmp' /'longjmp'不能很好地協同工作,因爲它們可能會泄漏(並且被C標準允許)。 – Lindydancer