偶尔,我在我的程序代码的一个地方写了一个拼写错误:
int a = 10;
char* b = new char(a);
错误很明显:我写了()而不是[]。奇怪的是...代码编译好了,它在调试器中运行确定。但是,在执行这些行的函数之后,调试器外部的编译.exe崩溃了。
第二行代码真的合法吗?如果是,那对编译器意味着什么?
答案 0 :(得分:10)
这是一个数字值为a
的char,在本例中为10
。指针不仅指向数组,你知道。
答案 1 :(得分:5)
您正在分配单 char
并为其分配a
的值。它根本没有分配数组。
与在new
表达式中为任何其他类型调用构造函数相同:
std::string* s = new std::string("foo");
int* i = new int(10);
std::vector<std::string>* v = new std::vector<std::string>(5, "foo");
答案 2 :(得分:2)
char t(a)
创建一个初始化为a
值的本地字符
new char (a)
创建一个动态分配的char,初始化为a
的值。