C++ 分段故障的可能原因是什么?

C++ 分段故障的可能原因是什么?,c++,C++,这是我的主要功能 #include <iostream> #include "FlyingPoints.h" using namespace std; void read(const char* msg, FlyingPoints& f) { int inPoints, outPoints; cout << "Enter " << msg << endl; cout << "Enter number

这是我的主要功能

#include <iostream>
#include "FlyingPoints.h"

using namespace std;

void read(const char* msg, FlyingPoints& f)
{
    int inPoints, outPoints;
    cout << "Enter " << msg << endl;
    cout << "Enter number of incoming flying points: ";
    cin >> inPoints;
    cout << "Enter number of spent flying points: ";
    cin >> outPoints;
    f = FlyingPoints(inPoints, outPoints);
}
int main()
{
    FlyingPoints left, right, result, ref;

    cout << "Flying Points Calculator\n";
    cout << "========================\n";

    read("Left Operand...", left);
    read("Right Operand...", right);

    cout << "Result: " << endl;
    left.display();
    cout << " + ";
    right.display();
    cout << " = ";
    result = left + right;
    result.display();
    cout << endl;

    read("2nd Right Operand...", right);

    cout << "Result: " << endl;
    result.display();
    cout << " += ";
    right.display();
    cout <<  " => ";
    result += right;
    result.display();
    cout << endl;

    read("Reference...", ref);
    if (result == ref){
        cout << "Result == Reference" << endl;
    } else {
        cout << "Result != Reference" << endl;
    }
    return 0;
}
和.cpp文件

#include <iostream>
#include "FlyingPoints.h"
using namespace std;

void FlyingPoints::updatebalance(){
    if(inPoints > outPoints){
        inPoints = inPoints - outPoints;
        outPoints = 0;
    }else{
        outPoints = inPoints - outPoints;
        inPoints = 0;   
    }
}
FlyingPoints::FlyingPoints(){
    inPoints = 0;
    outPoints = 0;
}
FlyingPoints::FlyingPoints(int in, int out){
    inPoints = in;
    outPoints = out;
}
void FlyingPoints::display(){
    cout << inPoints << " points available to fly." << outPoints << "      points spent." << endl;
}
FlyingPoints& FlyingPoints::operator+=(const FlyingPoints& f){
    inPoints += f.inPoints;
    outPoints += f.outPoints;
    updatebalance();
    return *this;//why do we return this?*this refers to the operator?
}
FlyingPoints operator+(const FlyingPoints& a, const FlyingPoints& b){
    //inPoints = a.inPoints + b.inPoints;
    //outPoints = a.outPoints + b.outpoints;    
    return a + b;
}
bool operator==(const FlyingPoints& first, const FlyingPoints& second){
    if(first.inPoints == second.inPoints && first.outPoints == second.outPoints){
        return true;
    } else {
        return false;
    }
}
这就是我跑步时发生的事情。 飞行点计算器

======================== 输入左操作数

输入传入飞行点的数量:500

输入飞行点数:300

输入右操作数

输入进入的飞行点数量:200

输入飞行点数:100

结果:

500点可供飞行,300点已消耗

200分可供飞行,100分已消耗。 分段故障

我似乎不知道这个分割错误是从哪里来的,可以吗


有人帮忙吗?这可能是原因吗谢谢

问题的原因是操作符+无条件地调用自身,因此是无限递归的

引用OP

FlyingPoints operator+(const FlyingPoints& a, const FlyingPoints& b){
    //inPoints = a.inPoints + b.inPoints;
    //outPoints = a.outPoints + b.outpoints;    
    return a + b;
}

学习如何使用调试器真是一个好时机。但它只会在右边的.display;,后面给我一个seg错误;,我不知道发生了什么事
FlyingPoints operator+(const FlyingPoints& a, const FlyingPoints& b){
    //inPoints = a.inPoints + b.inPoints;
    //outPoints = a.outPoints + b.outpoints;    
    return a + b;
}