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

时间:2015-12-03 15:24:50

标签: c++ arrays

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

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

但是我收到了这样的错误消息:

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

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

4 个答案:

答案 0 :(得分:3)

你有一个;。变化

int buff_size; = width*height*3;

int buff_size = width*height*3;

除此之外;如果你真的想拥有一个可变长度的数组;你必须动态分配它;您可以通过以下几种方式实现此目的:

C ++ :new和delete:

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);

答案 1 :(得分:3)

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

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

delete[] buffer;

答案 2 :(得分:1)

您希望避免使用原始指针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]};

答案 3 :(得分:0)

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

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

所有其他选项都不安全(您要么更容易泄漏内存或更容易访问越界)。