C语言一个小菜的有关问题

C语言一个小菜的问题
C/C++ code
//题目:题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
#include<stdio.h>
void main()
{
    int a[10]={1,2,3,9,11,12,13,15,67,80},i,j,temp1,temp2,number,end;
    printf("原始的数组排序:\n");
    for(i=0;i<10;i++)
        printf("%-3d",a[i]);
        printf("\n");

    printf("请插入一个数字:");
    scanf("%d",&number);

    end=a[9];
    if(number>end)
          a[10]=end;
    else
    {
      for(i=0;i<10;i++)
      {
          if(a[i]>number)
          {
             temp1=a[i];   //最大的数存于temp1
            a[i]=number;   //最小的数存于a[i],目的是保留好a[i]的值;
             for(j=i+1;j<11;j++)  //给a[i]后面增加一个, 用于存放比a[i]大的a[i+1],将较大的值放在a[j]中
             {
               temp2=a[j];
               a[j]=temp1;
               temp1=temp2;                          
             }
             break;
          }
      }
    }

for(i=0;i<=11;i++)
    printf("%6d",a[i]);


}


程序达到了目的,但是最后会弹出 Unhandled exception 0xC0000005;Access Violation,这里没有指针怎么会这样呢,求解啊?

------解决方案--------------------
没看完。。不过你这个
if(number>end)
a[10]=end;
越界了、、

------解决方案--------------------
你需要扩展数组的长度的话就用动态数组(vector),如果不想用,就在一开始申请足够的长度,比如你只要插入一个数,而原来有10个数的话,就申请为a[11],并且记住该数组的最后一个元素是a[10]而不是a[11],所以最后输出部分索引i不能等于11的。楼主看下书吧……
------解决方案--------------------
数组长度不够,插入一个的话就是11个数了
这样改
C/C++ code

int a[11]={1,2,3,9,11,12,13,15,67,80}……
.
.
else
    {
      for(i=0;i<11;i++)
      {
          if(a[i]>number)