循环缓冲区重置内存
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;
}
您已将aa
声明为unsigned char
。因此,当你达到255并递增时,它会回到0。您可能应该使用int,因为该变量用作数组索引变量。
这是因为当aa
从255
增加1时,它会因为unsigned char
而进入0
,所以它变成了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
}
相关文章:
- 在 capnp FlatArrayMessageReader 的对齐内存缓冲区中接收 zmq 消息
- 如何从内存缓冲区加载张量流图
- 来自iostream或内存缓冲区的Apache Arrow表
- 如何正确复制内存缓冲区?
- 将不相邻的内存缓冲区视为连续缓冲区的数据结构
- 我可以在没有任何锁的情况下从不同的线程读取内存缓冲区吗?
- 设备驱动程序内存缓冲区处理器缓存问题
- C 接口到线性内存缓冲区
- 如何分配可执行的内存缓冲区
- 使用新的位置来创建静态常量指针,指向静态内存缓冲区
- 将内存缓冲区写入 std::stringstream
- 如何使用LEADTOOLS 19将图像效果应用于内存缓冲区中的JPEG
- CUDA sprintf 到全局/共享内存缓冲区
- 写入内存缓冲区时性能损失 (C++)
- 绘制和创建内存缓冲区 (Windows GDI)
- 如何将屏幕图像放入内存缓冲区
- std::从内存缓冲区复制到矢量
- 用c++获取内存缓冲区
- C -我如何gzip解压缩块文件到内存缓冲区
- 从内存缓冲区创建fstream对象