请教大神们一个弱弱的问题!!!!!!!
# 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的地方去了.
显然数组越界
[解决办法]
编译器不对数组下标越界进行检查,所以只能靠自己保证对数组的操作不越界,越界后可能会覆盖后面内存保存的其他有效数据,所以越界很麻烦,也比较难调试!