读书人

请问大神们一个题!

发布时间: 2012-05-20 16:03:12 作者: rapoo

请教大神们一个弱弱的问题!!!!!!!
# 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不够!
数组越界了!

读书人网 >C语言

热点推荐