在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...