请问这个程序到底出了什么问题???

/*The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?求最大质因数*/
#include
int ifprime(int x){//判断是否是质因数
int i;
if(x<=1)
return 0;
else if(x==2)
return 1;
else{
for(i=2;i<=(x-1)/2;i++){
if(x%i==0)
return 0;
}
return 1;
}
}
void main(){
int i,x,a[1000],j=1,k,max=0;
int ifprime(int);
printf("please input the number:");
scanf("%d",&x);
for(i=2;i<=(x-1)/2;i++){
if(x%i==0){
if(ifprime(i))
a[j++]=i;
}
}
for(k=1;;k++){
if(a[k]>max)
max=a[k];
}
printf("the largest prime factor is:%d/n",max);
}
编译组建都没有问题,但运行就会出现“Access Violation”,为什么???

for(k=1;;k++){
if(a[k]>max)
max=a[k];
}这个是个死循环,会无限给数组a添加成员,造成了数组越界

for (k = 1;; k++){
    if (a[k]>max)
        max = a[k];

这里k没有上限
而你的a最大只有1000

for循环中没有对条件进行判断,它当然会无限循环

 /*The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?求最大质因数*/
#include <stdio.h>
int ifprime(int x)
{
    //判断是否是质因数
    int i ;
    if(x<=1)
    return 0 ;
    else if(x==2)
    return 1 ;
    else 
    {
        for(i=2;i<=(x-1)/2;i++)
        {
            if(x%i==0)
            return 0 ;
        }
        return 1 ;
    }
}
void main()
{
    int i,x,a[1000],j=1,k,max=0 ;
    int ifprime(int);
    printf("please input the number:");
    scanf("%d",&x);
    for(i=2;i<=(x-1)/2;i++)
    {
        if(x%i==0)
        {
            if(ifprime(i))
            a[j++]=i ;
        }
    }
    for(k=1;k<1000;k++)//擦,循环条件都没有
    {
        if(a[k]>max)
        max=a[k];
    }
    printf("the largest prime factor is:%d\n",max);
}

CSDN的这一块的排版太差了啊

求教:
改为
for(k=1;k<=1000;k++){
    if(a[k]>max)
        max=a[k];
}

后程序运行结果还是不对,能帮我看一下这个程序到底哪里有问题吗?