为什么我不能使用变量来制作数组?

Why can't I use a variable to make an array?

本文关键字:数组 变量 不能 为什么      更新时间:2023-10-16

我想用可变大小制作数组,如下所示。

int buff_size = width*height*3;
unsigned char buffer[buff_size];

但我收到了一条错误消息:

mfc_test5Dlg.cpp(418): error C2057: expected constant expression

如何制作可变大小的数组?

您有一个;。更改

int buff_size; = width*height*3;

int buff_size = width*height*3;

除此之外;如果你真的想要一个可变长度的数组;您必须动态地分配它;你可以通过几种方式做到这一点:

C++:新建和删除:

unsigned char* buffer = new unsigned char[buff_size];
...
delete[] buffer;

C:malloc和free:

unsigned char* buffer = (unsigned char*) malloc(buff_size); // or malloc(sizeof(char) * buff_size)
...
free(buffer);

在C++中不能有可变大小的数组。如果你绝对想,你可以动态分配它,但使用std::vector几乎总是更好的,无论如何,这就是动态方式:

int buff_size = width*height*3;
unsigned char* buffer = new char[buff_size];
...
delete[] buffer;

您需要避免使用带有原始指针的newdelete

std::size_t const buff_size = width*height*3u;

1) 如果可能,使用std::vector<char>

std::vector<char> buffer{buff_size};

2) 如果可用,请使用std::make_unique

auto buffer = std::make_unique<char[]>(buff_size);

3) 手动使用std::unique_ptr,否则:

std::unique_ptr<char[]> buffer{new char[buff_size]};

在现代/安全/惯用C++中,您可以使用vector:制作可变大小的数组

std::vector<unsigned char> buffer(buff_size);

所有其他选项都是不安全的(您要么泄漏内存,要么访问越界,这比必要的更容易)。