新的char(大小)在C 中是什么意思

What does new char(size) mean in C++?

本文关键字:是什么 意思 char 大小 新的      更新时间:2023-10-16

通过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&MDASH初始化它。宽松等效于此:

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,但结果已定义。如果charunsigned,则int围绕char表示的最大值(通常为255)。

也存在类似的语法:

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

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

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

#include <iostream>
using namespace std;
int main() {
    int size = 'A';
    char *buf = new char(size);
    cout << *buf;
}

打印出

null的原因:1024*1024 = 0x100000。最后一个字节进入字符。char为无效。实际上,我在一段时间以来见过的效率最低的零终止字符串。