运行我的已编译程序时出现分段错误(核心转储)

时间:2020-04-30 09:29:21

标签: c++

我有此代码:

#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。体积+ f2。体积)));

当我构建时:

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。体积+ f2。体积)));

当我跑步时:

Si jemélange“ Eau:600 ml,pH 7” avec“酸性氯化物:500 ml,pH为2“的j'obtiens:分割错误(堆芯被丢弃)

0 个答案:

没有答案