循环后移-为什么似乎会数组越界?

#include<stdio.h>
#include<stdlib.h>
void cicycle (int n,int m,int *p);
int main ()
{
int a,n,m,i;
printf("请输入n个整数:");
scanf("%d",&n);
printf("请输入后移的个数:");scanf("%d",&m);if(m>n) m%=n;
if((a=malloc(n
sizeof(int)))==NULL){
printf("Not able to allocate memory.");
exit(1);
}
for(i=0;i<n;i++){
printf("请输入第%d个元素",i+1);
scanf("%d",a+i);
}
cicycle(n,m,a);
for(i=0;i<n;i++) printf("%d\n",*(a+i));
return 0;
}
void cicycle (int n,int m,int *p)
{
int *a,i,j=0,b=n-1,*temp;
if((a=malloc(m*sizeof(int)))==NULL){
printf("Not able to allocate memory.");
exit(1);
}
for(i=n-m;i<n;i++){
temp=a+j;*temp=*(p+i+1);j++;
}
for(i=n-m-1;i>0;i--){
temp=p+b;temp=(p+i);b--;
}
for(i=0;i<m;i++){
temp=p+i;temp=(a+i);
}
}

麻烦用代码块格式化一下代码吧,不然*号不显示,阅读太困难。左右移一定要注意数组最大下标问题,容易越界访问呢

应该没有问题,用打印语句跟踪一下变量变化。