可能EXC_BAD_ACCESS与函数长度有关吗?

时间:2017-08-10 19:41:43

标签: c++ exc-bad-access

我在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
}

有谁知道为什么会这样?为什么只有在多线程时才会发生?

我发誓我会尝试一种减少方法长度的方法,但我很好奇为什么我得到了这个错误。

0 个答案:

没有答案