急!!!!C++ 新手,在写作业时遇到如下问题,希望大神可以帮忙看看,谢谢了!!!
-
vector< pair > pillarSmiles;
vector kmin, kmax;
vector< pair > marks;
ArbitrageFreeInterpolator af;int a = 0;
while(!fin.eof()) {
double t;
double atmvol;
double ms25;
double rr25;
double ms10;
double rr10;
if (fin >> t >> atmvol >> ms25 >> rr25 >> ms10 >> rr10) {
cout << t << "\t" << atmvol << "\t" << ms25 << "\t" << rr25 << "\t" << ms10 << "\t" << rr10 << std::endl;
marks = input2Marks(spot, rd, rf, t, atmvol, ms25, rr25, ms10, rr10);
af = ArbitrageFreeInterpolator(t, marks, spot, mu);
pillarSmiles.push_back( pair(t, af) );
std::cout<< "pillarSmiles[" << a <<"].second.Vol(1.3)= "< kmin.push_back(marks.front().first); // for plotting the charts only
kmax.push_back(marks.back().first);
}
a++;
}
ImpliedVol iv(pillarSmiles);
ImpliedVol,Smile都是自定义的类,AbitrageFreeInterpolator是Smile的子类,声明如下:
class ArbitrageFreeInterpolator : public Smile
{
public:
ArbitrageFreeInterpolator();
ArbitrageFreeInterpolator(double _t, const vector& _marks, double _S, double _mu);
virtual double Vol(double strike) const;
private:
vector< pair > marks; //M (k, sigma) input pairs;
double S; // Spot price;
double mu; // drift of spot;
double t; //time to maturity(in unit of year);
vector< pair > outputmarks; // N (k, c)pairs;
vector y2; // second derivatives;
};
Input文件内容如下:
1.25805 0.0100 0.0030
0.02 0.1550 0.0016 -0.0065 0.0050 -0.0111
0.04 0.1395 0.0016 -0.0110 0.0050 -0.0187
0.06 0.1304 0.0021 -0.0143 0.0067 -0.0248
......
然后我发现pillarSmile中存储的都是最后一次af的值,也就是每次重新给af赋值时,都会改变pillarSmile中以前输入的值,另外我也尝试过在循环外建一个AbitrageFreeInterpolator的vector,然后每次将循环内新定义的AbitrageFreeInterpolator赋值给这个vector,
结果会报错:Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)
想知道各位有什么好的解决办法吗?
更新,采用一楼的建议,循环中改成了: ArbitrageFreeInterpolator* af = new ArbitrageFreeInterpolator(t, marks, spot, mu); pillarSmiles.push_back( pair(t, *af) ); delete af; cout出来的结果就不一样了,但是出现了一个新的问题,就是每次到pillaSmile最后几组的时候,出来的结果总是很大的异常值,有时候会中断,提示Thread 1:EXC_BAD_ACCESS(code=1,address=0x70) , 我查了下好像是访问已释放信息导致的,不太懂,想问下有什么解决的办法?