0

これが循環するとき、dd[0] は 256.1 に並置されたように 0 に設定されます ?? 「dd」メモリが「aa」で 0 にリセットされているようです。

unsigned char aa = 0;
double *dd = new double[256];

//circular buffer
dd[aa] = 0.1;
for(int i = 0; i < 600; i++){
    qstr += QString::number(aa,'d',0) + "  " + QString::number(dd[aa],'f',1) + "         ";
    aa++;//onces 'aa' reaches 255, the next increment resets back to 0 for 'aa'
    dd[aa] = dd[aa - 1] + 1;
}
4

4 に答える 4

3

aaとして宣言しましたunsigned char。したがって、255 にヒットしてインクリメントすると、0 に戻ります。この変数は配列インデックス変数として使用されるため、おそらく int を使用する必要があります。

于 2013-08-09T15:57:46.890 に答える
2

それは、 から1aaずつインクリメントするとになるためです。2550unsigned chardd[0] = dd[-1] + 1junkdd[-1]-1

また、配列の境界外にアクセスしているのは、未定義の動作です。aaになるときは避けてみてください0

于 2013-08-09T16:01:29.237 に答える
0

unsigned char は 8 ビット長です。unsigned char が保持できる最大数は 255 です (2 進数で 1111111)。1増やすと0になる

于 2013-08-09T16:01:04.670 に答える