为什么我不能使用变量来制作数组?
Why can't I use a variable to make an array?
我想用可变大小制作数组,如下所示。
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;
您需要避免使用带有原始指针的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]};
在现代/安全/惯用C++中,您可以使用vector
:制作可变大小的数组
std::vector<unsigned char> buffer(buff_size);
所有其他选项都是不安全的(您要么泄漏内存,要么访问越界,这比必要的更容易)。
相关文章:
- 具有推导参数的模板函数指针数组变量
- 按字母顺序对结构内数组变量中的名称进行排序
- 传递 std::数组变量作为参数
- 为什么数组变量正在更新
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 类中的数组变量C++导致"was not declared in this scope"实现文件的一个函数中错误,但在构造函数中不会导致错误
- 数组变量中更多变量或更多维度?
- 数组变量周围的堆栈已损坏
- 数组变量衰减为指针
- C++ 无法将字符数组变量分配给字符串变量
- 使用指针变量打印特定的数组变量
- 数组变量是C++中的引用吗?
- 数组变量未正确分配以进行循环
- 在 c++ 中向数组变量添加一个数字
- 如果数组变量在 c# 代码中定义为“ref”参数,则如何传递数组变量
- 指针和 c 样式数组变量的专用模板
- 堆栈数组变量清理
- 如何从DLL检索数组变量?(视觉C )
- 如何将初始值设定项与右值引用参数一起使用 // 为什么不能使用另一个 C 样式数组变量初始化 C 样式数组
- 更改了错误的数组变量