[英]Create Dynamically Allocated Array C++
我正在尝试在C ++中创建类型为unsigned char*
的动态分配数组。 但是,当我这样做时,我得到的是一个字符串,而不是我想要的括号括起来的( {}
)数组。
unsigned char* arr = new unsigned char[arrLen];
您会看到后者如何不仅在第一个字符之后消失了? 这就是我想要的。
我该如何解决?
感谢您的时间。
首先,默认情况下,de debugger假定char
代表一个ascii字符而不是一个数字。 它将像这样显示char
。
arr2
具有类型const char[3]
因此调试器知道要显示3个元素。
arr
类型为const char*
。 调试器无法知道它是仅一个元素还是具有一定数量元素的数组。
例如,如果您使用Visual Studio,则可以通过在监视菜单中添加语法为arr,3
的“变量监视”来提示调试器显示三个字符。
我不确定这是否是您要寻找的,但是您是否尝试过使用std :: vector? 它至少可以处理您正在寻找的动态分配,并且不应将NULL字符视为字符串的结尾。
#include <vector>
std::vector<char> arr = { 0x5A, 0x00, 0x2B };
如果想要一个可动态增长的chars(array)列表,则需要的是一个指针列表,其中每个段的列表都是很大的数字(例如1000)。向量容器类会牺牲内存使用量来实现增长。
同样,对于大量数据,也不建议一次动态增长一个数据元素。 如果要动态增长大列表,请分块创建一个列表,如下所示。 使用较大的列表细分-例如1000个单位。 在以下示例中,我创建了1000个列表。 我通过创建一个包含1000个指针的数组来做到这一点。 这将创建您要查找的100万个字符,并且可以动态增长。 以下示例显示了如何执行此操作。
.
void main() {
unsigned char* listsegment[1000];
int chrn=0;
int x, y = 0;
for (int x = 0; x < 1000; x++) {
listsegment[x] = new unsigned char[1000];
for (y = 0; y < 1000; y++) {
*(listsegment[x] + y) = chrn;
if (chrn >=255) chrn=0;
else chrn++;
}
}
}
完成程序-如果需要动态分配1000个以上的段怎么办?
然后创建一个细分市场列表。 它可以在链接列表中,也可以在容器类中。
由于单个集合创建1000个包含1000个字符的段,因此这些集合的集合可能不必大于1000。数千个集合将等于(1000 * 1000)* 1000,即等于十亿个。 因此,集合只需要为1000个或更少,就可以快速迭代通过,这使得不需要对集合进行随机访问。
这是程序重做以通过无限大的集合集合来支持无限数量的集合。 通常,这也是分段动态内存分配的一个很好的例子。
#include <iostream>
#include<queue>
using namespace std;
struct listSegmentSetType {
unsigned char* listSegment[1000];
int count=0;
};
void main() {
listSegmentSetType listSegmentSet;
queue<listSegmentSetType> listSegmentSetCollection;
int numberOfListSegmentSets = 0;
int chrn = 0;
int x, y = 0;
listSegmentSet.count = 0;
for (int x = 0; x < 1000; x++) {
listSegmentSet.listSegment[x] = new unsigned char[1000];
for (y = 0; y < 1000; y++) {
*(listSegmentSet.listSegment[x] + y) = chrn;
if (chrn >= 255) chrn = 0;
else chrn++;
}
listSegmentSet.count++;
}
// add just completely filled out first list segment set to que
listSegmentSetCollection.push(listSegmentSet);
numberOfListSegmentSets++;
// now fill in second set of list segments-
listSegmentSet.count = 0;
for (int x = 0; x < 1000; x++) {
listSegmentSet.listSegment[x] = new unsigned char[1000];
for (y = 0; y < 1000; y++) {
*(listSegmentSet.listSegment[x] + y) = chrn;
if (chrn >= 255) chrn = 0;
else chrn++;
}
listSegmentSet.count++;
}
listSegmentSetCollection.push(listSegmentSet);
numberOfListSegmentSets++;
// now fill out any more sets of list segments and add to collection
// only when count listSegmentSet.count is no
// longer less than 1000.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.