我习惯了java和php,现在我需要编写一些c ++代码。我很难创建一个动态大小的BYTE阵列。怎么做到这一点?
int byteSize = shm.getMemorySize();
BYTE byte[44]; // replace 44 by byteSize
答案 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;