WCJ2903162766 2024-04-10 15:55 采纳率: 87.5%
浏览 7
已结题

C++堆被损坏是什么原因?代码该怎么改?

Windows 已在 1.exe 中触发一个断点。

其原因可能是堆被损坏,这说明 1.exe 中或它所加载的任何 DLL 中有 Bug。

原因也可能是用户在 1.exe 具有焦点时按下了 F12。

输出窗口可能提供了更多诊断信息。
是VC2010


#include<iostream>
#include<string.h>
#include <cmath>
#include <vector>
using namespace std;
class pcb{
public:
    int arrtime; /* 作业提交时间*/
    int sertime;/*作业预计运行时间*/
    int wartime;/*作业等待时间*/
    int begtime; /*开始运行时间*/
    double turtime; /*周转时间*/
    double wtutime; /*带权周转时间*/
    int seq;/*序列*/
    pcb(){};
    pcb(int a,int b){
        arrtime = a;
        sertime = b;
    }
};
int n;
pcb* p = new pcb[n];
void cinn(){
    cout<<"请输入作业数量"<<endl;
    cin>>n;
    int a;
    for(int i=0;i<n;i++){
        cin>>a>>p[i].sertime;
        p[i].arrtime=a%100+(a/100)*60;
        p[i].seq=i+1;
    }
}
void exce(int a,int b){
    int temp =a;
    a=b;
    b=temp;
}
void hrn(){
    p[0].begtime=p[0].arrtime;
    p[0].turtime =p[0].sertime;
    p[0].wtutime = 1;
    p[0].wartime = 0;
    for(int j=0;j<n-1;j++){
        for(int k = j+1;k<n;k++){
            p[k].wartime=p[j].sertime+p[j].wartime;
        }
        for(int m=j;m<n;m++){
            for(int k = m;k<n-j;k++){
                if(p[k].wartime>p[k+1].wartime){
                    exce(p[k].wartime,p[k+1].wartime);
                    exce(p[k].seq,p[k+1].seq);
                    exce(p[k].arrtime,p[k+1].arrtime);
                    exce(p[k].sertime,p[k+1].sertime);
                }
            }
        }
    }
}
void print(){
    cout<<"调度次序        "<<"作业号          "<<"调度时间        "<<"周转时间        "<<"带权周转时间    "<<endl;
    for(int i=1;i<n;i++){
        p[i].begtime=p[i-1].begtime+p[i-1].sertime;
        p[i].turtime=p[i].begtime+p[i].sertime-p[i].arrtime;
        p[i].wtutime=p[i].turtime/p[i].sertime;
    }
    int sum=0,sum1=0;
    for(int i = 0;i<n;i++){
        cout<<i+1<<"              "<<p[i].seq<<"              "<<((p[i].begtime/60)*100+p[i].begtime%60)<<"            "<<p[i].turtime<<"       "<<p[i].wtutime<<"      "<<endl;
        sum = sum+p[i].turtime;
        sum1 = sum1+p[i].wtutime;
    }
    cout<<"平均周转时间:"<<sum/n<<"  平均带权周转时间"<<sum1/n<<endl;
}
int  main(){
    cinn();
    hrn();
    print();
    delete p;
    system("pause");
    return 0;
}
  • 写回答

3条回答 默认 最新

  • mlem_init 2024-04-10 16:44
    关注
    
    ```c
    //你全局定义了
    int n;
    pcb* p = new pcb[n];
    //全局定义时,n的值还没有初始化,就new内存去了,这很明显是错误的,既然使用了new,那就把pcb* p = new pcb[n]; \
    //这句话放在你cin>>n;后面就好了‘’
    
    //另外,delete p操作也不对,应该用
    delete[] p;
    
    //其他问题没细看,应该还可以
    

    ```

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

报告相同问题?

问题事件

  • 系统已结题 4月18日
  • 已采纳回答 4月10日
  • 修改了问题 4月10日
  • 创建了问题 4月10日

悬赏问题

  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题
  • ¥15 有没有人能解决下这个问题吗,本人不会编程
  • ¥15 plotBAPC画图出错
  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥20 能提供一下思路或者代码吗