首页 > 解决方案 > 运行编译的程序时出现分段错误(核心转储)

问题描述

我有这个代码:

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

class Flacon
{
private:
  string nom;
  double volume;
  double pH;

public:
    Flacon(string nom, double volume, double pH): nom(nom), volume(volume), pH(pH) {}
    ostream& etiquette(ostream&) const;
    friend ostream& operator<<(ostream&,const Flacon &);
    friend Flacon& operator+(Flacon const&, Flacon const&);

};


Flacon& operator+(Flacon const& f1, Flacon const& f2){
    Flacon f3(f1.nom + " " + f2.nom, f1.volume + f2.volume, -log10((f1.volume * pow(10,-f1.pH) + f2.volume * pow(10,-f2.pH))/(f1.volume + f2.volume)));
    return f3;
}

ostream& Flacon::etiquette(ostream& sortie) const {
    sortie << nom << " : " << volume << " ml, pH " << pH;
    return sortie;}

ostream& operator<<(ostream& o,const Flacon & f){
    f.etiquette(o);
    return o;
}

/*******************************************
 * Ne rien modifier après cette ligne.
 *******************************************/

void afficher_melange(Flacon const& f1, Flacon const& f2)
{
  cout << "Si je mélange " << endl;
  cout << "\t\"" << f1 << "\"" << endl;
  cout << "avec" << endl;
  cout << "\t\"" << f2 << "\"" << endl;
  cout << "j'obtiens :" << endl;
  cout << "\t\"" << (f1 + f2) << "\"" << endl;
}

int main()
{
  Flacon flacon1("Eau", 600.0, 7.0);
  Flacon flacon2("Acide chlorhydrique", 500.0, 2.0);
  Flacon flacon3("Acide perchlorique",  800.0, 1.5);

  afficher_melange(flacon1, flacon2);
  afficher_melange(flacon2, flacon3);

  return 0;

}

当我编译时,我有这个警告信息:

chimie.cc:23:9: 警告:对局部变量 'f3' 的引用返回 [-Wreturn-local-addr] Flacon f3(f1.nom + " " + f2.nom, f1.volume + f2.volume, -log10 ((f1.volume * pow(10,-f1.pH) + f2.volume * pow(10,-f2.pH))/(f1.volume + f2.volume)));

当我建立:

chimie.cc:23:9: 警告:对局部变量 'f3' 的引用返回 [-Wreturn-local-addr] Flacon f3(f1.nom + " " + f2.nom, f1.volume + f2.volume, -log10 ((f1.volume * pow(10,-f1.pH) + f2.volume * pow(10,-f2.pH))/(f1.volume + f2.volume)));

当我运行时:

Si je mélange "Eau : 600 ml, pH 7" avec "Acide chlorhydroque : 500 ml, pH 2" j'obtiens : Segmentation fault (core dumped)

标签: c++

解决方案


推荐阅读