首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问大神们一个题!

2012-05-20 
请教大神们一个弱弱的问题!!!!!!!# includestdio.h# includestdlib.hint main(){long * aint i,n,jp

请教大神们一个弱弱的问题!!!!!!!
# include<stdio.h>
# include<stdlib.h>
int main()
{
  long * a;
int i,n,j;
printf("Please Input n:");
scanf("%d",&n);
  a=(long*)malloc((n)*sizeof(int));
a[0]=a[1]=1;
a[2]=0;

for(i=1;i<n+1;i++)
{
a[i+2]=a[i];
}
  //printf("%d",a[98]);
  j=3;
while(j<n+1)
{
for(i=0;i+j<n+1;i++)
a[i+j]+=a[i];
j=j+2;
//printf("%d\n",j);
}
printf("%d",a[n]);
free(a);
return 0;
}
这个程序是不是内存不够????怎么老弹
damage:after normal block (#48)at 0差005A30B8????
什么意思??









[解决办法]
for(i=1;i<n+1;i++)
 {
 a[i+2]=a[i];
 }
 你申请的最大内存也才 n.
结果你给访问到 n+2的地方去了.
显然数组越界
[解决办法]
编译器不对数组下标越界进行检查,所以只能靠自己保证对数组的操作不越界,越界后可能会覆盖后面内存保存的其他有效数据,所以越界很麻烦,也比较难调试!

探讨

for(i=1;i<n+1;i++)
 {
 a[i+2]=a[i];
 }
 你申请的最大内存也才 n.
结果你给访问到 n+2的地方去了.
显然数组越界

[解决办法]
你打断点就知道,这是数组下标越界了,你申请的内存不够用,你这申请n个,但是用n+3个。。。
[解决办法]
for(i=1;i<n+1;i++)
{
a[i+2]=a[i];
}
很明显啊 你的数组定义的n
却要n+2不够!
数组越界了!

热点排行