我在C ++的有限元方法代码中创建了一个类。我正在使用AppleClang 8.0.0.8000042。
我班上的一个方法相当大,超过45k行(在缩进之后。之前, ie ,仅在;
和}
之后换行,它在周围1.5K)。我知道这是不好的做法,但是现在我还没有看到我在这种方法中做的其他选择。
此方法中的第一条指令为同一个类调用另一个方法。当我以串行模式运行它(我正在开发的框架具有多线程支持)时我没有问题。但是,如果我使用多线程模式(在同一台计算机上),即使只有一个线程,我也会得到一个EXC_BAD_ACCESS (code = 1, address=0x6ffffffa3280)
。
好吧,我以为我搞砸了别的地方。当我用完选项时,我决定只删除我的大部分巨型方法,将其变成一个无用但很简短的方法,只有那个会导致EXC_BAD_ACCESS
错误的指令。但是,它确实解决了这个问题。
情况是这样的:
糟糕的情况
//A.cpp
int A::foo() const{ return 2;}
void A::fun(const double & in_param){
double out;
this->func(in_param, out);
...
}
void A::func(const double& in_param, double &out_param){
const int fooVar = this->foo();//EXC_BAD_ACCESS
...
(45k lines of code)
...
}
好方案
//A.cpp
int A::foo() const{ return 2;}
void A::fun(const double & in_param){
double out;
this->func(in_param, out);
...
}
void A::func(const double& in_param, double &out_param){
const int fooVar = this->foo();//fooVar = 2
}
有谁知道为什么会这样?为什么只有在多线程时才会发生?
我发誓我会尝试一种减少方法长度的方法,但我很好奇为什么我得到了这个错误。