田力先生 2023-03-30 17:18 采纳率: 71.4%
浏览 22
已结题

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


#include<iostream>
#include<iomanip>

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.
在网上搜了搜,猜测是内存访问越界,但不知道如何修改,求帮助。

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2023-03-30 17:20
    关注

    应该是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]就越界访问了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 3月30日

悬赏问题

  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
  • ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
  • ¥15 io.jsonwebtoken.security.Keys