物件記憶體空間分配與初始化

2021-06-07 14:44:41 字數 687 閱讀 9399

在c++中,乙個變數可以在某個程式範圍內的任何地方定義,

所以在這個變數的定義之前是無法對它分配記憶體空間的。

通常,c++編譯器可能像c編譯器一樣,在乙個程式塊的開頭

就分配所有的記憶體。這些對我們來說是無關緊要的,

因為作為

乙個程式設計師,我們在變數定義之前總是無法得到儲存空間的。

即使儲存空間在塊的一開始就被分配,

建構函式也仍然要到物件

的定義時才會被呼叫,因為識別符號只有到此時才有效。編譯器甚

至會檢查我們有沒有

把乙個物件的定義放到乙個條件塊中,比如在switch塊

中宣告,或可能被goto跳過的地方。

下面程式,如果去除goto和case 2的注釋,會產生編譯時錯誤。

#include using namespace std;

class x

};void f(int i)

x x1;

jump1:

switch(i)

}int main()

在上面的**中,goto和switch都可能跳過建構函式的呼叫點,

然而這個物件會在後面的程式塊中起作用,

這樣,建構函式就

沒有被呼叫,所以編譯器給出了一條錯誤資訊。這就確保了對

象在產生的同時被初始化。

初始化指標是否需要分配記憶體空間

初學指標,不知道聲名指標或者聲名物件時為什麼要用new來分配記憶體空間,如以下 int a int b 2 a b cout a a 此處輸出結果為 a 2 而再看如下 int a int b 2 a b cout a a 執行時編譯器會報錯,為什麼呢?簡單來講,我們沒有為int 型指標p開闢記憶體...

記憶體空間與分配

1 記憶體分配錯誤 動態記憶體分配錯誤有兩種基本型別 記憶體錯誤和記憶體洩漏。1 記憶體錯誤 當乙個指標或者該指標所指向的記憶體單元成為無效單元,或者記憶體中分配的資料結構被破壞時,就會造成記憶體錯誤。指標未被初始化,指標被初始化為乙個無效位址,指標被不小心錯誤地修改,在與指標相關聯的記憶體區域被釋...

分配記憶體空間

void calloc size t nobj,size t size 分配足夠的記憶體給nobj個大小為size的物件組成的陣列,並返回指向所分配區域的第乙個位元組的指標 若記憶體不夠,則返回null.該空間的初始化大小為0位元組.char p char calloc 100,sizeof cha...