[英]circular buffer resets memory?
当此循环返回时,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;
}
您有一个声明为unsigned char
aa
。 因此,当您达到255并递增时,它又回到0。您可能应该使用int,因为此变量用作数组索引变量。
这是因为当aa
由一个从增量255
它去0
,因为unsigned char
,因此,它变成dd[0] = dd[-1] + 1
现在任何junk
可存在于dd[-1]
和这里似乎你有-1
。
另外,您正在访问数组的边界之外,这是未定义的行为。 您应该尝试避免当aa
变为0
。
无符号字符为8位长。 无符号字符最多可容纳255。(二进制1111111)。 如果将其增加1,它将变为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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.