BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #79092同步于 2014/5/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

就是多定义了一个数组就地址溢出,好奇怪啊

jianxing
2014/5/4镜像同步23 回复
这是加一个数组报错的程序 我新加了几个图,分别是我把数组声明为a[43],a[50],a[100]报错的图 while(1) { int j=0x00; float sum=0; float ADS; float power; int ADS1; int a[43]; for(i=230.0;i<=2750.0;i+=60.0) { Chose_RF(i); Chose_Path(i); serial_busy=0; Flag2=j; Sendchar(Flag1,Flag2); delayX10ms(3); Set_ADF4350_Freq(i); delayX10ms(3); a[j]=i1; power=pow(10,(40*(2.2*a[j]/4096-0.85)-60)/10); sum+=power; j++; } ADS=((10*log10(sum/43)+60)/40+0.85)*4096/2.2; serial_busy=0; Sendchar(Flag1,Flag3); delayX10ms(3); ADS1=(int)ADS; exchange(ADS1); serial_busy=0; Sendchar(lbit,hbit); delayX10ms(3); } 这是不用数组后的,没有报错 while(1) { int j=0x00; float sum=0; float ADS; float power; int ADS1; for(i=230.0;i<=2750.0;i+=60.0) { Chose_RF(i); Chose_Path(i); serial_busy=0; Flag2=j; Sendchar(Flag1,Flag2); delayX10ms(3); Set_ADF4350_Freq(i); delayX10ms(3); power=pow(10,(40*(2.2*i1/4096-0.85)-60)/10); sum+=power; j++; } ADS=((10*log10(sum/43)+60)/40+0.85)*4096/2.2; serial_busy=0; Sendchar(Flag1,Flag3); delayX10ms(3); ADS1=(int)ADS; exchange(ADS1); serial_busy=0; Sendchar(lbit,hbit); delayX10ms(3); } 虽然说这个数组没必要写上,但是我感觉加上也无伤大雅啊,为什么会爆出错,说什么地址溢出呢,真是纳闷儿,求指点!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
fancl20机器人#1 · 2014/5/4
for 循环和是不是整数没有关系 16 进制只是写起来的表示形式而已, 和 j = 0 没区别 LZ 给一下 i 的定义呗, 没看到定义 【 在 AK47 的大作中提到: 】 : 1.for循环里只能为整数。 : 2.溢出是因为j为十六进制。
jianxing机器人#2 · 2014/5/4
【 在 fancl20 的大作中提到: 】 : for 循环和是不是整数没有关系 : 16 进制只是写起来的表示形式而已, 和 j = 0 没区别 : LZ 给一下 i 的定义呗, 没看到定义 i是在头文件里面定义的。double i;
fancl20机器人#3 · 2014/5/4
可能不是这个数组溢出了, 因为多定义了这个数组导致其他变量在栈上的地址改变, 原来某个溢出没有访问到不能访问到的地址所以没报错现在报错了. 还有个可能是栈空间用完了单纯的栈溢出.. 能定位到哪句语句溢出么 【 在 jianxing 的大作中提到: 】 : i是在头文件里面定义的。double i;
ak47机器人#4 · 2014/5/4
恩,我搞错了,删掉了。 我记忆中,for循环里默认为int,否则自动转换,记忆中是这样子的。 【 在 fancl20 的大作中提到: 】 : for 循环和是不是整数没有关系 : 16 进制只是写起来的表示形式而已, 和 j = 0 没区别 : LZ 给一下 i 的定义呗, 没看到定义
changzhu机器人#5 · 2014/5/4
不要在while里面定义变量 加入数组是48个int,不加是5个,加入数组内存是不加数组的十倍 这也看不出你循环执行了多少遍
inaadversity机器人#6 · 2014/5/4
在哪一行出错的,怀疑栈溢出。
Wizmann机器人#7 · 2014/5/4
打assert,目测是j溢出了。。。你试试声明a[100]。。。
jianxing机器人#8 · 2014/5/4
【 在 Wizmann 的大作中提到: 】 : 打assert,目测是j溢出了。。。你试试声明a[100]。。。 Soga,我试试
jianxing机器人#9 · 2014/5/4
【 在 changzhu 的大作中提到: 】 : 不要在while里面定义变量 : 加入数组是48个int,不加是5个,加入数组内存是不加数组的十倍 : 这也看不出你循环执行了多少遍 是不是因为在循环,然而数组没有刷新啊