Есть две проблемы в линии:
x[i] = s_in[i];
На первой итерации, когда aboce строка выполняется, значения переменные:
frame: 0
left: -239
i: -240
код пытается прочитать из-за пределов границ s_in[]
и писать пишет за пределами границ x[]
.
Это undefined behaviour.
Трудно обеспечить исправление кода, не зная, как информация выложена в s_in[]
. Предполагая, что кадр 240 байт и на каждой итерации вы хотите скопировать значения для двух последовательных кадров из s_in[]
в x[]
, код должен выглядеть примерно вдоль этих линий:
int s_in[]; /* Array filled with a lot of integer values */
for (frame = 1; frame < maxFrames; frame ++) {
left = 240 * (frame - 1); /* the first value of the previous frame */
right = 240 * (frame + 1); /* the first value of the next frame */
int x[480]; /* is always 480 long */
for (i = 0; i < 480; i ++) {
x[i] = s_in[left + i];
}
}
Там нет смысла в вычислении right-left+1
на каждом Итерация, так как вы уже знаете, она должна быть 480
. Как видно из приведенного выше кода, значение right
даже не требуется.
Внешний контур должен начинаться с frame = 0
, но для кадра #0
нарушающая линия пытается читать снаружи s_in[]
; поэтому он начинается с кадра #1
.
Я полагаю, что вы делаете больше обработки внутри внутреннего контура. В противном случае вы можете заменить его вызовом на memcpy(&x, &s_in[left], 480);
. Он делает то же самое, что и текущий статус цикла for
, но он работает намного быстрее.
Извините, это в C. – Alex
Можете ли вы показать нам, что вы вкладываете в 's_in'? – byxor
Где вы печатаете 'x'. Это внутри цикла «frame» или снаружи? –