c 中,不使用new申請的儲存空間就不是連續的嗎?個人覺得new是多此一舉,要用就用int之類的申明就可以

2021-04-18 11:51:48 字數 2603 閱讀 2915

1樓:8坤坤的小窩

不是多此一舉,new是動態申請,類似c語言裡的malloc函式!

在程式裡面,大多數情況下我們想用內得儲存空間在編容寫的**時是不知道的,在程式執行時才清楚,這時候如果用int之類宣告陣列,陣列太小,會造成儲存空間不夠,陣列太大又會造成空間的浪費。

所以new這個東西的功能就看出來了

2樓:匿名使用者

new 關鍵字是在程式的堆(heap)中申請記憶體,堆中

bai分配的記憶體空間不du會自動釋放,需要用delete關鍵字去釋zhi放;

直接宣告變數(或物件dao)的記憶體由系統在程式的堆疊(stack)上分配,其生存期與申明區域**範圍一致,出了**範圍,會自動釋放。

3樓:匿名使用者

系統自動開闢的棧記憶體是連續同時也是有上限的如果你的陣列過大是不夠用的

4樓:南山小野豬

new 主要是用來動態申請記憶體空間 在編譯器中 有堆疊的概念,這涉及指標的知識,學好指標可是很重要的

在c++中怎麼通過new申請多個連續的儲存空間?

5樓:神指導

其實原理是一樣的,bai你需要用dunew申請乙個空間,zhi

當然了也需要一

dao個指標來承接申內請來的空間。例如:int*p;p=new int[3];申請空間的大容小就是3倍的sizeof(int),是連續的。

也可以看作是開闢了乙個陣列。在c++中也可以單獨開闢乙個整型的空間,比如int*p=new int; 。作用相當於定義了乙個整型資料p。

一般都是開闢乙個陣列(即連續的空間)或者乙個類。

6樓:

p=new int[10];

和p=(int *)malloc(sizeof(int)*10);相同

7樓:匿名使用者

動態陣列、

int *p = new int[5];

c++中的new是否能夠開闢連續的空間

8樓:幻夢·人生

如果想建立乙個陣列,可以通過new的方式申請連續的空間用於存放陣列。

但是如果在同一時間內連續呼叫new函式,申請的空間不是連續的。

9樓:匿名使用者

比如new int[100]

c++中,new申請的是堆記憶體,是在近堆中還是遠堆中申請?請幫忙解釋原因,多謝~

c++中,new申請記憶體問題?

10樓:匿名使用者

首先bai說明的是,a 不是陣列,是

du乙個指標。

int *a=new int[10]; 是用new開闢一zhi個10個int的陣列的內dao

存,把頭指標賦專值給a,所以a可以訪問屬這些陣列的資料,int *a=new int;

開闢乙個int的記憶體空間, 至於引用a[100]當然可以,因為a是記憶體位址的指標,它一般能移動100次,但是它指的地方一般沒初始化,所以可能會出現亂碼,但是不會報錯。

11樓:匿名使用者

int *a=new int;

這樣,a的長度bai就是乙個int型別的變數空間du。即只zhi有乙個元素。

dao在這種情況下,引用 a[100]也是專可行的,不會屬報錯.不過,a[100]不在a"陣列"的範圍內,所以對其賦值可能會導致執行時錯誤。

12樓:匿名使用者

int* a代表的是bai定義乙個指標du,這個指標指向的是zhi乙個int型別,

使用new的時候是表示在堆上開闢記憶體空dao間,你第乙個中new int[10] 這裡專的10代表個數,這裡表示,開闢乙個可以容納10個int的記憶體空間,

而下面這個只開闢乙個,

這裡你使用的屬是指標的方式訪問資料,即使是上面中你可只能*a=1; *(a+1)=2;

你說這種情況一般編譯器不會提示但是由於訪問乙個未知的記憶體就可能造成不確定的後果

13樓:匿名使用者

陣列a的大小從你程式設計時記憶體的安排是1個整數,但是不代表a只能訪問這乙個整數,事實專上a是一

個指屬針,而a[x]的x是這個指標位址的偏移,所以你願意偏移多少就偏移多少。對於你這種指標方式申明的動態陣列,編譯器是不會報錯的。而如果申明int a[10]的話,你仍然可以a[100]這樣用,能夠提供陣列溢位檢查的編譯器會報警告,但不會造成編譯錯誤。

但是執行就不一樣了。

引用a[100]會不會造成程式出錯退出要看執行到a申明時,作業系統為a分配記憶體的實際情況而定。通常作業系統不會因為你申明乙個只有1個整數大小的記憶體空間,就為你分配這麼大的記憶體,這樣效率會很低。所以作業系統會事先在每次使用者程式申請記憶體時分配一塊很大的記憶體,然後讓使用者慢慢用,這個分配過程乙個重要事情就是將這塊記憶體位址空間對映頁表製作出來。

所以當你訪問a[100]時,這個頁表要是恰好製作過了那麼你就可以訪問成功,如果沒有製作,這是會產生缺頁異常,作業系統會檢查出錯的原因,發現你訪問了你們有申請的記憶體空間,就會強制殺死你的程式並報錯,非法訪問,或者在linux中就是segment fault。

C 如何開闢空間,在C 中如何釋放NEW開闢的空間

你第二行申請了5個int的空間,裡面存了東西,那麼你又增加了5個空間,那麼你需要一箇中轉的指標,用新建的中轉指標開闢10個空間,然後把原有空間中的內容存到新開闢的空間中,delete掉原來申請空間,之後在讓原來指標指向新申請空間,然後將中轉指標置null。這樣就變成你所要求的內容了 這是我該的程式 ...

C 中new分配記憶體的問題,C 動態分配記憶體 記憶體洩漏問題 new

這樣是會有記憶體洩漏的,因為第一次執行s new stu 後,系統申請了一塊新的記憶體空間 型別為stu 並把其地址賦給s 第2此執行s new stu後,系統又申請了一塊新的記憶體空間,並把其地址賦給s,此時把s原來的值覆蓋掉了,也就是第一次申請的記憶體空間的地址丟失了 而delete s 只是把...

蘋果手機購買的儲存空間怎麼使用,蘋果手機購買的記憶體怎麼用?

操作步驟如下 1.在iphone主屏上找到 蘋果手機購買的記憶體怎麼使用?2013年9月10日,蘋果公司推出第七代產品iphone5c及iphone5s,iphone5s於同年9月20日正式發售。第八代的iphone 6和iphone6 plus於2014年9月10日正式發布。2016年9月8日,i...