memcpy は、データをコピーしている宛先配列にオフセットを作成するようです。ここでは、ヘッダーで次のように定義されたソース バッファーを生成します。
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 です。問題ありません。6 つの頂点ごとの色は同じままです (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 によって作成されたものですか? あなたの意見は何ですか?