Return-value C++

Return-value C++

本文关键字:C++ Return-value      更新时间:2023-10-16

我是一个新程序员,当我遇到这个错误时,我正在解决codeforce的一个问题。

http://codeforces.com/contest/342/problem/A

我的算法工作正常,但我不知道为什么最后,我有一个错误消息和一个不同于 0 的返回值。如下图所示。

https://i.stack.imgur.com/sz9Jc.png

提前谢谢你!!


这是我的算法:

#include <iostream>
#include <vector>
using namespace std;
void print(int a, int b, int c, int n) {
    for (int i=0;i<n;++i) cout<<a<<" "<<b<<" "<<c<<endl;
}
int main () {
    int n; cin>>n;
    vector<int> V(5);
    bool cont=true;
    for (int i=0;i<n;++i) {
    V[i]=0;
    }
    for (int i=0;i<n;++i) {
        int a; cin>>a;
        if (a==5 || a==7) cont=false;
        if (cont==true) {
            if (a==1) V[0]++;
            if (a==2) V[1]++;
            if (a==3) V[2]++;
            if (a==4) V[3]++;
            if (a==6) V[4]++;
        }
    }
    if (cont==false) {
        cout<<-1<<endl;
    }else {
        if (V[0]==V[1] && V[1]==V[3] && V[2]==0 && V[4]==0) {
            print(1,2,4,V[0]);
        }else if (V[0]==V[1] && V[1]==V[4] && V[2]==0 && V[3]==0) {
            print(1,2,6,V[0]);
        }else if (V[0]==V[2] && V[2]==V[4] && V[1]==0 && V[3]==0) {
            print(1,3,6,V[0]);
        }else if (V[0]==V[1] && V[1]==(V[4]+V[3]) && V[2]==0) {
            print(1,2,4,V[3]);
            print(1,2,6,V[4]);
        } else if (V[0]==V[4] && V[0]==(V[1]+V[2]) && V[3]==0) {
            print(1,2,6,V[1]);
            print(1,3,6,V[2]);
        } else if (V[0]==(V[1]+V[2]) && V[0]==(V[3]+V[4]) && V[3]==V[1]) {
            print(1,2,4,V[1]);
            print(1,3,6,V[2]);
        } else if (V[0]==(V[1]+V[2]) && V[0]==(V[4]+V[3]) && V[3]==(V[1]/2) && V[2]==(V[4]/2)){
            print(1,2,4,V[3]);
            print(1,2,6,V[1]-V[3]);
            print(1,3,6,V[2]);
        } else {
            cout<<-1<<endl;
        }
    }
    cout<<"fin"<<endl;
    return 0;
}
   for (int i=0;i<n;++i) {
    V[i]=0;
    }

您应该检查n是否为 5 或更少。或者动态分配向量。如果出现n>5,则会导致堆损坏,从而导致您获得退出代码。

如果您将 n 的值用于其他内容,并且您只想初始化您的向量,则可以迭代

   for (int i=0;i<5;++i) 

对于您显示的示例,您的向量很小:

vector<int> V(5);

在那行之后,你清理矢量

for (int i=0;i<n;++i) {
V[i]=0;
}

但是在您的示例中,您需要九个元素。你用它破坏了堆。将第一行更改为

vector<int> V(n);

它将返回预期的 0。

您看到的3221226356转换为十六进制的退出代码是0xC0000374。谷歌搜索表明它是堆损坏的异常代码。您在清理时某处遇到错误并引发异常,然后该异常代码已作为您的进程退出代码出现。