我想从可变大小制作数组,如下所示。
int buff_size = width*height*3;
unsigned char buffer[buff_size];
但是我收到了这样的错误消息:
mfc_test5Dlg.cpp(418): error C2057: expected constant expression
如何制作可变大小的数组?
答案 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)
您希望避免使用原始指针new
和delete
。
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);
所有其他选项都不安全(您要么更容易泄漏内存或更容易访问越界)。