起因
前不久遇到以一个问题,使用 MinGW
编译没有问题:
const int bufferSize = 3;
char buffer[bufferSize];
但是到了 MSVC
中就报错了:
expected constant expression
cannot allocate an array of constant size 0
原因:
该错误与编译工具有关,有的编译工具允许定义数组时使用变量,有的则不行。
MSVC
编译时,bufferSize
是个变量,一直要到运行期才被分配内存,才会有值,所以编译期的时候它还没有值,故而编译时会出错。
那么怎么 MSVC
怎么创建动态数组呢?
char *buffer = new char[bufferSize];
//...
delete []buffer;
malloc & new
new | malloc |
---|---|
new关键字是C++的一部分 | malloc是由C库提供的函数 |
new以具体类型为单位进行内存分配 | malloc以字节为单位进行内存分配 |
new在申请单个类型变量时可进行初始化 | malloc不具备内存初始化的特性 |
关于其背后的机制可参考 浅谈 C++ 中的 new/delete 和 new[]/delete[]