似乎 memcpy 在我正在复制数据的目标数组中创建了一个偏移量。在这里,我生成在 header 中定义的源缓冲区:
float segments[360*RANGE_INDEX*6];
void GlWidget::GenerateBuffers()
{
// srand( 0 );
int angleIndex = segmentIndex * 20;
for(int i = angleIndex; i < angleIndex + 20; i++)
for(int j = 0; j < RANGE_INDEX; j++)
{
float randNumber = rand() % 255;
for(int k = 0; k < 6; k++)
{
segments[(i*RANGE_INDEX+j)*6+k] = randNumber/255.0f;
}
}
}
我已经使用迭代将源缓冲区初始化为 0。
void GlWidget::exec()
{// memcpy ( void * destination, const void * source, size_t num );
qDebug() << "inside exec()";
int startIndex;
int finalIndex;
startIndex = segmentIndex * 20;
finalIndex = startIndex + 20;
ppi->MemCpyToColorVector(&segments[0*RANGE_INDEX], 0);
}
在这里,我将源复制到目标,我遇到的问题是第一个i,即角度0,没关系,每六个顶点的颜色保持不变(0到599)。但是,对于角度 1 (i == 1),源缓冲区是正确的,索引 600 到 605 保持相同的值,尽管在目标缓冲区中,颜色 600 和 601 相同,而与 603 不同。
void PlanPositionIndicator::MemCpyToColorVector(float* segments, int angleIndex)
{// memcpy ( void * destination, const void * source, size_t num );
// QVector<float> colors;
size_t bytes;
int index;
index = 0;
bytes = 0;
index = angleIndex * _RANGE_CNT;
index *= 6;
bytes = sizeof(float) * _RANGE_CNT * 6;
memcpy(&colors[index], &segments[index], bytes);
}
这个偏移量是由 memcpy 创建的吗?你有什么意见?