- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面两种不同的计算机体系结构中,使用 C 转储相同的两个数组时,我得到两个不同的结果。谁能给我解释一下原因吗?
架构一:x86_64(普通 64 位 intel PC,fedora 23)
架构二:armv7l(带有 raspbian 的树莓派)
这是示例代码
double ytops[7];
double ybots[7];
// Assigning values loop
for(int i=0;i<8;i++)
{
frame_grabber(); // some custom function that gives sensor data with two variables: ruler_top_cal_preset, ruler_bottom_cal_preset integer
ytops[i] = ruler_top_cal_preset;
ybots[i] = ruler_bottom_cal_preset;
printf("ytops[%i]: %f \n", i, ytops[i]);
printf("ybots[%i]: %f \n", i, ybots[i]);
}
printf("---raw-array--- \n");
for(int i = 0; i<8; i++ ){
printf("ytops[%i]: %f \n", i, ytops[i]);
}
printf("--------------- \n");
for(int i = 0; i<8; i++ ){
printf("ybots[%i]: %f \n", i, ybots[i]);
}
printf("-------end----- \n");
架构 1(X_86) 给出以下结果:
ytops[0]: 143.000000
ybots[0]: 211.000000
ytops[1]: 143.000000
ybots[1]: 211.000000
ytops[2]: 143.000000
ybots[2]: 175.000000
ytops[3]: 144.000000
ybots[3]: 175.000000
ytops[4]: 144.000000
ybots[4]: 175.000000
ytops[5]: 144.000000
ybots[5]: 175.000000
ytops[6]: 144.000000
ybots[6]: 172.000000
ytops[7]: 143.000000
ybots[7]: 172.000000
---raw-array---
ytops[0]: 143.000000
ytops[1]: 143.000000
ytops[2]: 143.000000
ytops[3]: 144.000000
ytops[4]: 144.000000
ytops[5]: 144.000000
ytops[6]: 144.000000
ytops[7]: 143.000000
---------------
ybots[0]: 211.000000
ybots[1]: 211.000000
ybots[2]: 175.000000
ybots[3]: 175.000000
ybots[4]: 175.000000
ybots[5]: 175.000000
ybots[6]: 172.000000
ybots[7]: 172.000000
-------end-----
架构 2 (ARMV7l) 给出:
ytops[0]: 206.000000
ybots[0]: 413.000000
ytops[1]: 206.000000
ybots[1]: 411.000000
ytops[2]: 205.000000
ybots[2]: 427.000000
ytops[3]: 206.000000
ybots[3]: 415.000000
ytops[4]: 205.000000
ybots[4]: 416.000000
ytops[5]: 205.000000
ybots[5]: 421.000000
ytops[6]: 206.000000
ybots[6]: 411.000000
ytops[7]: 206.000000
ybots[7]: 418.000000
---raw-array---
ytops[0]: 418.000000
ytops[1]: 206.000000
ytops[2]: 205.000000
ytops[3]: 206.000000
ytops[4]: 205.000000
ytops[5]: 205.000000
ytops[6]: 206.000000
ytops[7]: 206.000000
---------------
ybots[0]: 413.000000
ybots[1]: 411.000000
ybots[2]: 427.000000
ybots[3]: 415.000000
ybots[4]: 416.000000
ybots[5]: 421.000000
ybots[6]: 411.000000
ybots[7]: 418.000000
-------end-----
当然,由于该运动时的传感器数据,比较两个结果集时的数值是不同的。可以接受。
在架构一上,一切都是由值分配循环分配的。这是正确的。但是,请查看“赋值循环”中架构二的结果集“ytops[0]”值以及“原始数组”打印的相同值。
ytops[0]
正在获取 ybots[7]
这怎么可能?这种现象叫什么?如何避免这种情况?
最佳答案
你所有的都是错的。
使用c数组索引从 0
到 length_of_array-1
所以,使用
for(int i=0;i<8;i++)
由于最后一个 i
值为 7
,您正在越界访问数组:您的数组从 ytops[0]
开始到ytops[6]
。这是Undefined Behavior
您必须使用
for(int i=0;i<7;i++)
如果你这样做的话最好,例如使用ytops
数组
for(size_t i=0;i<sizeof(ytops)/sizeof(ytops[0]);i++)
关于c - 在 Intel X_86 和 ARM 架构上转储两个相邻的 C 数组时出现奇怪的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38735710/
我正在尝试使用我找到的正则表达式将 CamelCase 转换为 snake_case here .这是我正在使用的代码片段: in := "camelCase" var re1 = regexp.Mu
非常有趣的是,如果您打算使用代码在 Bash 中显示 0_1 x=0 y=1 echo "$x_$y" 那么就只会显示 1 我试过 echo "$x\_$y" 但它不起作用。 如何回显 $x_$y 形
我刚刚在 msp430f5529(TI launchpad)上遇到了一个有趣的现象。在尝试了不同的方法之后,我找到了解决方案,但我不明白这里发生了什么。 此代码是定时器中断服务例程 (ISR) 的一部
class Stack{ public: char data_[100]; int top_; }; class
我是一名优秀的程序员,十分优秀!