2015-05-15 31 views
0

雖然(在C++)分配通過new緩衝區我錯誤地寫道:在C++中,新字符(大小)是什麼意思?

int size = 1024 * 1024; 
char *buf = new char(size); 

而不是正常的語法

char *buf = new char[size]; 

但是代碼沒有被編譯並使用該buf時導致奇怪的崩潰變量。顯然,似乎分配了八個字節的緩衝區。

我想知道new char(size)的含義。

+1

初始化爲單個字符的大小值(可能不適合它) – deviantfan

回答

7
char *buf = new char(size); 

它僅分配sizeof(char)字節並用size鬆散相當於此初始化:

char *__internal_buf = new char; //1 byte only 

*__internal_buf = size; //or static_cast<char>(size); 

char *buf = __internal_buf; 

這是相同的區別是這兩個:

char x(65); //y is single element initialized to be 'A'. as 65 is 'A' 
char y[65]; //y is an array of size 65 

希望有所幫助。

+0

'new char'分配標量'char'。 '新的字符[1]'分配矢量'char' – Ajay

+0

@Ajay:是的。先生。 :d – Nawaz

4

這意味着您爲單個內存分配char並使用整數size對其進行初始化。在你的情況下,size不適合char。如果char碰巧有符號,則整數size正在轉換爲char,但結果是實現定義的。如果charunsigned,則int環繞由char(通常爲255)表示的最大值。

類似的語法也存在非指針:

int x(10); // initialize x with 10 

char c('a'); // initializes c with 'a' 
1

空,但這裏有一個更好的例子:

#include <iostream> 
using namespace std; 

int main() { 
    int size = 'A'; 
    char *buf = new char(size); 

    cout << *buf; 
} 

打印出

原因NULL:1024 * 1024 =的0x100000。最後一個字節進入字符。字符是空的。事實上,我在一段時間內看到了效率最低的空字符串。