在用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,改變了原來的字元串。