数组定义问题 |
老董 发表于 2021-6-6 20:47 数组越界,如果那个地址没有被用到,则不会对程序造成影响,如果是另外一个变量的地址,则会把该变量的的内容给修改,造成数据错误甚至程序崩溃。 |
多谢各位大师指教 真的是数组越界了 本来写程序的时候只想到了用时 ,分,秒,每个两位数共六位数 把那两个杠杠给忘了 越界了又不报错 看来真是一点也不能马虎 但是也没搞懂 为何越界了会出现这样的现象 |
npn 发表于 2021-6-5 16:05 keil的内存分配并不是简单的按字符的顺序来的,对于这种简单的程序这样排列不难理解,对于大的程序,变量名不是单一字符的内存分配并不是这样。你可以去实验。 这是一个编译的内存分配,你看看。 D:000AH PUBLIC Sec_Count D:000CH PUBLIC jaA D:000DH PUBLIC RealTimeFlow D:000EH PUBLIC aas D:000FH PUBLIC accFlow D:0011H PUBLIC Flowrate D:0012H PUBLIC c D:0013H PUBLIC d D:0014H PUBLIC e D:0015H PUBLIC f D:0016H PUBLIC g D:0017H PUBLIC h D:0018H PUBLIC i D:0019H PUBLIC b321 |
liuzx66 发表于 2021-6-5 11:41 定义的变量: ![]() Keil为变量分配的内存地址: ![]() |
npn 发表于 2021-6-4 22:27 请举例说明,不要误导 |
Keil编译时会将变量名进行字符串排序,小的会被分配到低地址,而不是行靠前的变量分配到低地址,把变量l改成h,就分配到其他地址去了。 再加上数组越界就会破坏其他变量,导致程序不能正常运行。 编译后会生成一个M51格式的文件,什么数组、变量分配到什么地址,可以用记事本打开查看。 |
可以看一下,是不是定义出现问题 |
可能h这个变量重复定义了,或者后面码代码的时候没有按照定义的变量来不小心打错了,可以仔细再检查一下,最后我建议楼主以后定义变量的时候尽量用多个字母定义,不行就用全拼嘛,这样不容易搞混。 |
crrr 发表于 2021-6-4 15:42 亦有此疑问。 |
你的程序变量定义时,有个全局变量i,在函数中有定义了一个局部变量i,还有形参也用有i,太乱了,会出问题的。 |
变量名简单或者复杂,对于编译器来说,都是一样的。编译器不会对此有歧视 |
楼主会不会是重复定义了 |
老董 发表于 2021-6-4 14:16 楼主修改变量名时,是否将数字 1小 误作小写字母 i? 建议试试将变 量名改为大写字母 L |
你试一下,每个变量定义时顺便数值 =0;看会不会正常 |
改变变量名不会这样,一定有其它的问题你没找到。 |
![]() ![]() |
仅从贴出来的程序部分,看不出问题。 但值得吐槽的是你这变量名取得很不好。 |
最后两位显示其实不是99 是我想快速看到运行结果把时间调快了1000倍产生的快门暂留 |