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.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# - 为什么检测到碰撞时变量不增加?
- awk - 如何将一个文件的内容重定向到其他文件?
- javascript - 显示和隐藏 JavaScript
- android - Mockito 模拟类的最终字段
- python - CMake find_package for Python3 在找到 Python 2 时失败
- event-log - 错误:无法启动 DCOM 服务器:Microsoft.Windows.Cortana
- python - 为什么 pip install 使用的参数有时与 import 使用的参数不同?
- server - 在服务器上托管 PyQt 应用程序
- winforms - 如果 Control.Hide 则不会折叠
- wordpress - 将免费产品添加到购物车 woocommerce 但仅在特定日期