关于c++程序报错,求帮助


#include
#include

using namespace std;

#define N 5
void fun(int *a);
void fun(double* a);
void fun(float* a);
int main() {
    int h, a[N] = { 0 };
    double b[N] = { 0 };
    float c[N] = { 0 };
    cout << "请选择你要输入的数据类型(int,double,float)==(1,2,3)\n";
    cin >> h;
    if (h == 1) {
        cout << "请输入N个随机整型变量\n";
        for (int i = 0; i < N; i++)
            cin >> a[i];
        fun(a);
    }    
    if (h == 2) {
        cout << "请输入N个随机双精度浮点型变量\n";
        for (int i = 0; i < N; i++)
            cin >> b[i];
        fun(b);
    }
    if (h == 3) {
        cout << "请输入N个随机单精度浮点型变量\n";
        for (int i = 0; i < N; i++)
            cin >> c[i];
        fun(c);
    }
    return 0;

}
void fun(int a[N]) {
    int e, k;
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N - i; j++)
            if (a[j] > a[j + 1])e = a[j], a[j] = a[j + 1], a[j + 1] = e;
    for (k = 0; k < N; k++)
        cout << setw(3) << a[k];
}
void fun(double a[N]) {
    int  k;
    double e;
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N - i; j++)
            if (a[j] > a[j + 1])
                e = a[j], a[j] = a[j + 1], a[j + 1] = e;
    for (k = 0; k < N; k++)
        cout << std::fixed << a[k];
}
void fun(float a[N]) {
    int k;
    float e;
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N - i; j++)
            if (a[j] > a[j + 1])e = a[j], a[j] = a[j + 1], a[j + 1] = e;
    for (k = 0; k < N; k++)
        cout << std::fixed<< a[k];
}

这个程序使用vs2022报错,Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.
在网上搜了搜,猜测是内存访问越界,但不知道如何修改,求帮助。

应该是a数组有越界现象吧
for (int i = 0; i < N; i++)
for (int j = 0; j < N - i; j++)
if (a[j] > a[j + 1])e = a[j], a[j] = a[j + 1], a[j + 1] = e;
当i=0时,j最大值为N-1,那么a[j+1]就越界访问了