VC中的Access Violation是怎么回事?

来源:百度知道 编辑:UC知道 时间:2024/05/24 17:34:12
#include <stdio.h>
#include <string.h>

int compare(int *p1,int *p2)
{
int *P1,*P2,flag;

P1=p1;
P2=p2;
while (*p1++!=-1);
while (*p2++!=-1);
if ((p1-P1)>(p2-P2))
{
return 1;
}
if ((p1-P1)<(p2-P2))
{
return 0;
}
p1--;
p2--;
flag;
while (p1>=P1)
{
if (*p1>*p2)
{
return 1;
}
if (*p1<*p2)
{
return 0;
}
p1--;
p2--;
}
return 0;
}

int main()
{
int fi[500][100],i,k,in[100],up,len,*pout,n;
char ins[100];

for (i=0;i<500;i++)
{
for (k=0;k<100;k++)
{
fi[i][k]=-1;
}
}
fi[0][0]=fi[1][0]=1;
for (i=2;i<500;i++)
{
for (k=0;fi[i-1][k]!=-1;k++)
{
if (fi[i-2][k]==-1)
{
fi[i][k]=fi[i-1][k];
}
else

unhandled exception in fi.exe:0xC0000005:Access Violation是指针越界错误。
你这个程序不是在scanf("%d",&n)处出错,而是在其上面的循环里出错了,出错的循环如下
for (k=0;fi[i][k]!=-1||up!=0;k++)
{
if (fi[i][k]==-1)
{
fi[i][k]=up;
}
else
{
fi[i][k]+=up;
}
up=fi[i][k]/10;
fi[i][k]-=up*10;
}
你没有对k做上限限制,我在linux下调试这个程序的时候发现出错时k已经递增到2788.这显然与你的初始目的是不一致的。应该在循环里加上k<100的限制条件。