使用冒泡排序的时候出现的错误

使用冒泡排序的时候出现的异常
代码如下:
#include <stdio.h>
#define N 7
void pai (int a[]);
int main (void)
{

int er[N]={54,34,23,76,98,2,6};
pai (er);

}
void pai (int a[]) /*对数组进行排序*/
{
int k,b,tem;
for (k=0;k<7;k++)
{
for (b=0;b<6-k;a++)
{
if (a[b]>a[b+1])
{
tem = a[b];
a[b] = a[b+1];
a[b+1] =tem;
}
}
}
}
调试的时候出现了:使用冒泡排序的时候出现的错误
反汇编中断指向了:使用冒泡排序的时候出现的错误
中断指向第22行,但是把第21行删掉后又能成功运行,这是为什么?
------解决方案--------------------
引用:
void pai (int a[]) /*对数组进行排序*/
{
    int k,b,tem;
    for (k=1;k<7;k++)
    {
        for (b=0;b<6-k;a++)//b++
        {
            if (a[b]>a[b+1])
            {
                tem = a[b];
                a[b] = a[b+1];
                a[b+1] =tem;
            }
        }
    }
}
第一个循环k = 1
还有第二个for循环的第三个参数是b++
------解决方案--------------------
for (b=0;b<6-k;b++)
造成问题的原因基本上是不好的习惯导致的,
------解决方案--------------------
16行b++

引用:
中断指向第22行,但是把第21行删掉后又能成功运行,这是为什么?

把第21行删掉后又能成功运行???
你确定?

一个简单的冒泡排序没必要#define

# include <stdio.h>

void sort(int * a, int len);

int main(void)
{
int a[6] = {10, 2, 8, -8, 11, 0};
int i;

sort(a, 6);

for (i=0; i<6; ++i)
{
printf("%d ", a[i]);
}
printf("\n");

return 0;
}

//冒泡排序
void sort(int * a, int len)
{
int i, j, t;

for (i=0; i<len-1; ++i)
{
for (j=0; j<len-1-i; ++j)
{
if (a[j] > a[j+1])  // >表示升序 <表示降序
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t; 
}
}
}
}