![](/img/trans.png)
[英]c++: Does the new operator for dynamic allocation check for memory safety?
[英]Dynamic memory allocation in C++ require the new operator new?
int d;
cin >> d;
int asdf[d];
這被認為是動態內存分配嗎? 根據http://www.cplusplus.com/doc/tutorial/dynamic/ ,似乎我什至不能編譯它,因為不使用new運算符的數組只能以恆定大小聲明,也許我讀錯了。 (我在GNU CCC編譯器中使用CodeBlocks)
那和有什么區別
int d;
int *asdf;
cin >> d;
asdf = new int[d];
在刪除之前,使用新生命創建的數組唯一的區別是,而第一個數組在離開作用域后就被釋放了嗎?
int x[n];
是可變長度數組 (VLA),具有自動存儲期限(即“在堆棧上”)。 它在C89或C ++ 98/03中無效,但在C99中引入,通常可以作為擴展使用,例如在GCC中。
在某些平台上,也可以使用非標准的alloca()
函數來模仿該功能,該函數在VLA變得常見之前就已使用。
用第一種方法分配的內存來自分配給應用程序的堆棧。 當您使用new時,從堆分配內存,堆提供的內存方式比從堆獲取的方式多。 但是要使用new,變量必須是與數組相同類型的指針。 指針變量保存第一個存儲單元的地址。 int * a =新的int [x]; 將保留x個存儲單元,如果在程序仍在運行時專門刪除指針,則將釋放該單元。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.