在用new分配空間時要特別注意初始化現象。也許會因為初始化而使得記憶體不能用。
例如下面**的操作就會出現異常。
char * str;
str=new char[5]="abc";
str[1]='a';//出現異常
delete str;//出現異常(輪不到這個異常)
經過測試:
str[0]='a';//也會出現異常
所以我猜測:
str=new char[5]="a";並沒有去申請乙個5個字元的記憶體空間,然後初始化為"a"。而是提取了"a"的首位址返回。因為"a"是乙個常量,str[1]='a'和delete str自然就會出現異常。
這種情況又相當於char * str="abc" 與 char str="abc"情況不同.後者會給str分配乙個四位元組的空間,並且其內容可以改變。
如何證明str=new char[5]="abc"與"abc"指向同乙個記憶體呢?
看如下**:
char string[5]="abc";
char * str;
str=new char[5]=string;
str[1]='a';
cout<這樣輸出的結構為:aac,改變了原來的字串。
關於New字元陣列時初始化現象
在用new分配空間時要特別注意初始化現象。也許會因為初始化而使得記憶體不能用。例如下面 的操作就會出現異常。char str str new char 5 abc str 1 a 出現異常 delete str 出現異常 輪不到這個異常 經過測試 str 0 a 也會出現異常 所以我猜測 str n...
關於字元陣列的初始化
字元陣列可以在定義時進行初始化.有兩種初始化方法.方法1 逐個字元賦給陣列中各元素.這種方法最容易理解.例如 char c 5 把5個字元分別賦給c 0 至c 4 以下是幾點說明 1 如果大括號內提供的初值個數 即字元個數 大於陣列長度,則編譯時將出錯.如果初值個數小於陣列長度,則只將這些字元賦給前...
使用new時的初始化問題
在使用new分配記憶體單元時,一般希望新分配的單元能被初始化為全0。注意以下兩條語句 c code 1 2 int ptrint1 newint 新分配的記憶體單元裡的值是未知 int ptrint2 newint 加上括號。新分配的記憶體單元裡的值是全0 例1 在區域性區域內 c code 1 2...