關於New字元陣列時初始化現象

2021-08-24 21:12:13 字數 621 閱讀 1802

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