新的char(大小)在C ++中意味着什么?

时间:2015-05-15 04:44:45

标签: c++

在通过new(在C ++中)分配缓冲区时,我错误地写道:

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

而不是正常的语法

char *buf = new char[size];

然而,在使用此buf变量时,代码确实被编译并导致奇怪的崩溃。显然,似乎分配了一个8字节的缓冲区。

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

3 个答案:

答案 0 :(得分: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

希望有所帮助。

答案 1 :(得分: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'

答案 2 :(得分:1)

空,但这是一个更好的例子:

#include <iostream>
using namespace std;

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

    cout << *buf;
}

打印出A

NULL的原因:1024 * 1024 = 0x100000。最后一个字节在char中。 Char是空的。事实上,我在一段时间内看到了最低效的空终止字符串。