ラインに2つの問題がありますaboceラインが実行される非常に最初の繰り返しで
x[i] = s_in[i];
、値のは、変数は次のとおり
frame: 0
left: -239
i: -240
コードはs_in[]
の境界の外部から読み取る及びx[]
の境界の外側に書き込みを書き込もう。
これはundefined behaviourです。
s_in[]
に情報がどのように配置されているかを知らなくても、コードを修正するのは難しいです。フレームと仮定すると240バイトであり、あなたがx[]
にs_in[]
から2つの連続するフレームの値をコピーしたい各反復で、コードは、これらの線に沿って何かになります。それぞれにright-left+1
を計算するにはポイントがありません
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];
}
}
をあなたはすでにそれが480
でなければならないことを知っているので繰り返します。上のコードからわかるように、right
という値は必要ありません。
外側ループはframe = 0
で開始する必要がありますが、フレーム#0
では、違反行は外部からの読み取りを試みますs_in[]
;これがフレーム#1
で始まる理由です。
内側のループの内部でさらに処理するとします。それ以外の場合は、memcpy(&x, &s_in[left], 480);
への呼び出しで置き換えることができます。 for
ループの現在の状態と同じですが、はるかに速く実行されます。
申し訳ありません、C言語です。 – Alex
あなたは 's_in'に何を入れているのか教えてください。 – byxor
ここで 'x'を印刷しています。ループのための 'frame'の内側か、それとも外側か? –