当这个循环回来时,dd [0]设置为0,如同256.1 ??似乎'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;
}
答案 0 :(得分:3)
您aa
声明为unsigned char
。
所以当你达到255并且递增时,它会回到0.你可能应该使用一个int,因为这个变量被用作数组索引变量。
答案 1 :(得分:2)
这是因为当aa
从255
增加1时,由于0
,它会转到unsigned char
,因此现在变为dd[0] = dd[-1] + 1
任何junk
}}可以出现在dd[-1]
,此处似乎有-1
。
此外,您正在从其边界访问数组,这是一个未定义的行为。
您应该在aa
变为0
时尝试避免。
答案 2 :(得分:0)
无符号字符长度为8位。 unsigned char可以保存的最大数量是255.(在二进制1111111中)。如果将其递增1,则它将变为0
答案 3 :(得分:0)
我做了强制转换以避免aa = -1:
dd[aa] = 0.1;
for(int i = 0; i < 600; i++){
qstr += QString::number((unsigned char)((unsigned char)aa-(unsigned char)1),'d',0) + " " + QString::number(dd[aa],'f',1) + " ";
aa++;
dd[aa] = dd[(unsigned char)((unsigned char)aa-(unsigned char)1)] + 1; // casting
}