天天看點

關于New字元數組時初始化現象

在用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<<string<<endl;

這樣輸出的結構為:aac,改變了原來的字元串。