C ++动态数组大小定义

时间:2014-03-28 17:19:13

标签: c++

我习惯了java和php,现在我需要编写一些c ++代码。我很难创建一个动态大小的BYTE阵列。怎么做到这一点?

int byteSize = shm.getMemorySize();
BYTE byte[44]; // replace 44 by byteSize

7 个答案:

答案 0 :(得分:8)

除非您有非常具体的理由使用数组,否则应使用std::vector。通常,在C ++中使用其他语言的数组的类似上下文中,默认选择应为std::vector

答案 1 :(得分:4)

永远不要使用裸露的指针,否则会出现漏洞和内存泄漏,相反,这里有一些替代方案:

int len = something;
std::vector<char> buffer(len,0);

或c ++ 11智能指针

std::unique_ptr<char[]> buffer{ new char[len] };
带有make_unique的

或c ++ 14

auto buffen = std::make_unique<char[]>(len);

答案 2 :(得分:2)

使用矢量,除非您自己绝对需要处理内存。此外,这更像是一种偏好,但我更喜欢使用uint8_t而不是BYTE。它更加顺从,因为它不依赖于GCC。

#include <vector>
#include <cstdint>
...
std::vector<uint8_t> foo;

#include <cstdint>
...
uint8_t* data;
data = new uint8_t[10];
...
delete[] data;

答案 3 :(得分:2)

您可以使用STL标准容器类 std::vector 来创建动态可调整大小的数组:

#include <vector> // For std::vector
....

int byteSize = shm.getMemorySize();

// Create a vector of 'byteSize' bytes.
std::vector<BYTE> bytes(byteSize);

您可以使用通常的[]语法访问向量元素(例如bytes[0]bytes[1],... bytes[i])。

vector的析构函数将自动释放向量分配的内存,因此您不必注意释放内存。

您可以使用向量的push_back()方法在向量的末尾添加项目(使用自动调整大小)。 您可以使用向量的clear()方法清空它 vector的size()方法返回向量中的当前项目数。

如果您想了解有关std::vector的更多信息,可以通过Stephan T. Lavavej观看this great introductory video

答案 4 :(得分:1)

您可以按如下方式创建动态数组:

int byteSize = shm.getMemorySize();
BYTE* byte = new BYTE[byteSize];
//Use the byte
delete [] byte;

答案 5 :(得分:1)

一种方法是使用new

进行动态内存分配
BYTE* data = new BYTE[byteSize];
data[0] = 0;
delete [] data;

然而,初学者手中的这种方法可能导致memory corruptions,崩溃,memory leaks以及难以找到并修复的各种行为。

更好的方法是使用对于第一种方法存在的问题几乎是安全的std::vector

std::vector<BYTE> data;
data.resize(byteSize);
data[0] = 0;

答案 6 :(得分:1)

试试这个:

#include <vector>
#include <cstdint> 
[CODE] 
std::vector<uint8_t> data;