中邪了!数组重复输出结果不同?解决方法

中邪了!!!数组重复输出结果不同???
同一个数组,前后两次输出的结果竟然不同!!!是不是我的VC软件有问题????
#include<stdio.h>

//功能:判断是否为完全数,若是返回因子个数及所有因子;反之返回False.
//n:待判断数;q:因子数;a[]:存放因子数组。
int isperfect(int n,int *q,int a[])
{int i,sum=1,k;
 
 for(i=2;i<=n/2;i++)
  if(!(n%i)) sum=sum+i; 
 if(sum!=n) //非完全数
return 0;
 else //是完全数
{for(i=1,k=0;i<=n/2;i++) 
{if(!(n%i)) 
{a[k++]=i; //=========Tested!
// k++;
printf("%d\n",a[k-1]); }
}
*q=k;
for(i=0;i<*q;i++)
  printf("%d\n",a[i]);// return 1;
}
}

//-------主函数-----------------
void main() 

int i,j,m,q,a[]={0};  
printf("1000内的完全数:\n"); 
i=isperfect(28,&q,a);
//printf("%d\n",a[1]);
}

============================
运行结果竟然是:
1 2 4 7 14
1 5 4 7 14

究竟是什么原因??好心人帮我运行一下!!!

------解决方案--------------------
我运行了一下,把a[]={0};改大一点就可以了,譬如a[50](根据需要确定,50是我随便定的!)就可以了!得出的答案就不会不同了!
另外,你的代码中还存在这样几个小问题!---编译的时候你自己应该知道的!