指向更大 unsigned char 数组的每个第 n 个元素的指针数组
Array of pointers to every n-th element of bigger unsigned char array
我有大量无符号字符(称为 main_data),其中包含一些数据,这些数据会不时刷新。我想创建一个数组(称为 plot_data)指向每个 n-main_data。 想法是从外部源将新数据上传到 main_data 并减少 plot_data自动可用于我的绘图。 这是我最接近的尝试(它是用托管 C++ 编写的,VC++ 2010,WinForms 项目):
int mainDataSize = 64;
int plotDataSize = 8;
unsigned char* main_data = new unsigned char[mainDataSize];
for (int i = 0; i < mainDataSize; i++) {
main_data[i] = 2 * (i % 32);
}
unsigned char* plot_data = new unsigned char[plotDataSize];
for (int i = 0; i < plotDataSize; i++) {
int idx = (int)(mainDataSize / plotDataSize * i);
plot_data[i] = main_data[idx];
}
printf("Original data:\n");
for (int i = 0; i < mainDataSize; i++) {
printf("%d ", main_data[i]);
}
printf("\n\nData for plot:\n");
for (int i = 0; i < plotDataSize; i++) {
printf("%d ", plot_data[i]);
}
然后,在修改 main_data 之后,我希望打印指针数组会给我修改后的值。下面是修改打印的代码:
for (int i = 0; i < mainDataSize; i++) {
main_data[i] = i;
}
printf("\n\nChange made - Main data:\n");
for (int i = 0; i < mainDataSize; i++) {
printf("%d ", main_data[i]);
}
printf("\n\nChange made - Plot data:\n");
for (int i = 0; i < plotDataSize; i++) {
printf("%d ", plot_data[i]);
}
我已经尝试修复这个问题几个小时了,但似乎我没有得到什么,这应该是相对简单的。请帮助我理解我的错误。
您正在创建 chars
的数组,而不是 char *'s
的数组。您需要更改代码以使用指针数组:
int main()
{
int mainDataSize = 64;
int plotDataSize = 8;
unsigned char ** main_data = new unsigned char * [mainDataSize];
for (int i = 0; i < mainDataSize; i++) {
main_data[i] = new unsigned char(2 * (i % 32));
}
unsigned char ** plot_data = new unsigned char * [plotDataSize];
for (int i = 0; i < plotDataSize; i++) {
int idx = (int)(mainDataSize / plotDataSize * i);
plot_data[i] = main_data[idx];
}
printf("Original data:\n");
for (int i = 0; i < mainDataSize; i++) {
printf("%d ", *main_data[i]);
}
printf("\n\nData for plot:\n");
for (int i = 0; i < plotDataSize; i++) {
printf("%d ", *plot_data[i]);
}
for (int i = 0; i < mainDataSize; i++) {
*main_data[i] = i;
}
printf("\n\nChange made - Main data:\n");
for (int i = 0; i < mainDataSize; i++) {
printf("%d ", *main_data[i]);
}
printf("\n\nChange made - Plot data:\n");
for (int i = 0; i < plotDataSize; i++) {
printf("%d ", *plot_data[i]);
}
for (int i = 0; i < mainDataSize; i++) {
delete main_data[i];
}
delete[] main_data;
delete[] plot_data;
return 0;
}
I would like to create an array (called plot_data) of pointers
您发布的代码没有创建指针数组。它创建了一个 unsigned char
的动态数组。
如果你想创建一个指针数组:
unsigned char** plot_data = new unsigned char*[plotDataSize];
然后在循环中:
plot_data[i] = main_data + idx;
Note this is bad code because there are memory leaks everywhere
我还建议您使用 std::vector
,因为如果未正确调用 delete[]
,您的代码将泄漏内存。
#include <vector>
//...
std::vector<unsigned char> main_data(mainDataSize);
//...
std::vector<unsigned char*> plot_data(plotDataSize);
泄漏现在消失了。
我有大量无符号字符(称为 main_data),其中包含一些数据,这些数据会不时刷新。我想创建一个数组(称为 plot_data)指向每个 n-main_data。 想法是从外部源将新数据上传到 main_data 并减少 plot_data自动可用于我的绘图。 这是我最接近的尝试(它是用托管 C++ 编写的,VC++ 2010,WinForms 项目):
int mainDataSize = 64;
int plotDataSize = 8;
unsigned char* main_data = new unsigned char[mainDataSize];
for (int i = 0; i < mainDataSize; i++) {
main_data[i] = 2 * (i % 32);
}
unsigned char* plot_data = new unsigned char[plotDataSize];
for (int i = 0; i < plotDataSize; i++) {
int idx = (int)(mainDataSize / plotDataSize * i);
plot_data[i] = main_data[idx];
}
printf("Original data:\n");
for (int i = 0; i < mainDataSize; i++) {
printf("%d ", main_data[i]);
}
printf("\n\nData for plot:\n");
for (int i = 0; i < plotDataSize; i++) {
printf("%d ", plot_data[i]);
}
然后,在修改 main_data 之后,我希望打印指针数组会给我修改后的值。下面是修改打印的代码:
for (int i = 0; i < mainDataSize; i++) {
main_data[i] = i;
}
printf("\n\nChange made - Main data:\n");
for (int i = 0; i < mainDataSize; i++) {
printf("%d ", main_data[i]);
}
printf("\n\nChange made - Plot data:\n");
for (int i = 0; i < plotDataSize; i++) {
printf("%d ", plot_data[i]);
}
我已经尝试修复这个问题几个小时了,但似乎我没有得到什么,这应该是相对简单的。请帮助我理解我的错误。
您正在创建 chars
的数组,而不是 char *'s
的数组。您需要更改代码以使用指针数组:
int main()
{
int mainDataSize = 64;
int plotDataSize = 8;
unsigned char ** main_data = new unsigned char * [mainDataSize];
for (int i = 0; i < mainDataSize; i++) {
main_data[i] = new unsigned char(2 * (i % 32));
}
unsigned char ** plot_data = new unsigned char * [plotDataSize];
for (int i = 0; i < plotDataSize; i++) {
int idx = (int)(mainDataSize / plotDataSize * i);
plot_data[i] = main_data[idx];
}
printf("Original data:\n");
for (int i = 0; i < mainDataSize; i++) {
printf("%d ", *main_data[i]);
}
printf("\n\nData for plot:\n");
for (int i = 0; i < plotDataSize; i++) {
printf("%d ", *plot_data[i]);
}
for (int i = 0; i < mainDataSize; i++) {
*main_data[i] = i;
}
printf("\n\nChange made - Main data:\n");
for (int i = 0; i < mainDataSize; i++) {
printf("%d ", *main_data[i]);
}
printf("\n\nChange made - Plot data:\n");
for (int i = 0; i < plotDataSize; i++) {
printf("%d ", *plot_data[i]);
}
for (int i = 0; i < mainDataSize; i++) {
delete main_data[i];
}
delete[] main_data;
delete[] plot_data;
return 0;
}
I would like to create an array (called plot_data) of pointers
您发布的代码没有创建指针数组。它创建了一个 unsigned char
的动态数组。
如果你想创建一个指针数组:
unsigned char** plot_data = new unsigned char*[plotDataSize];
然后在循环中:
plot_data[i] = main_data + idx;
Note this is bad code because there are memory leaks everywhere
我还建议您使用 std::vector
,因为如果未正确调用 delete[]
,您的代码将泄漏内存。
#include <vector>
//...
std::vector<unsigned char> main_data(mainDataSize);
//...
std::vector<unsigned char*> plot_data(plotDataSize);
泄漏现在消失了。