雖然(在C++)分配通過new
緩衝區我錯誤地寫道:在C++中,新字符(大小)是什麼意思?
int size = 1024 * 1024;
char *buf = new char(size);
而不是正常的語法
char *buf = new char[size];
但是代碼沒有被編譯並使用該buf
時導致奇怪的崩潰變量。顯然,似乎分配了八個字節的緩衝區。
我想知道new char(size)
的含義。
雖然(在C++)分配通過new
緩衝區我錯誤地寫道:在C++中,新字符(大小)是什麼意思?
int size = 1024 * 1024;
char *buf = new char(size);
而不是正常的語法
char *buf = new char[size];
但是代碼沒有被編譯並使用該buf
時導致奇怪的崩潰變量。顯然,似乎分配了八個字節的緩衝區。
我想知道new char(size)
的含義。
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
希望有所幫助。
這意味着您爲單個內存分配char
並使用整數size
對其進行初始化。在你的情況下,size
不適合char
。如果char
碰巧有符號,則整數size
正在轉換爲char
,但結果是實現定義的。如果char
是unsigned
,則int
環繞由char
(通常爲255)表示的最大值。
類似的語法也存在非指針:
int x(10); // initialize x with 10
或
char c('a'); // initializes c with 'a'
空,但這裏有一個更好的例子:
#include <iostream>
using namespace std;
int main() {
int size = 'A';
char *buf = new char(size);
cout << *buf;
}
打印出
原因NULL:1024 * 1024 =的0x100000。最後一個字節進入字符。字符是空的。事實上,我在一段時間內看到了效率最低的空字符串。
初始化爲單個字符的大小值(可能不適合它) – deviantfan