分段故障C ++,括号后的运算符

时间:2016-04-25 00:02:52

标签: segmentation-fault dump core parentheses

我有一个覆盖括号运算符的A类。 以下代码有效:

int main(){
     ..
     A a;
     cout << a({0.5});
     ..
}

虽然以下代码不起作用

A fun(){
     ..
     A a;
     return a;
     ..
}
int main(){
     ..
     A a = fun();
     cout << a({0.5});
}

当我执行第二个代码时,出现以下错误:

segmentation fault (core dumped)

我无法理解为什么。

编辑:

这是运营商的首要任务:

virtual arma::vec operator()(const InputC& input) override
{
    const arma::vec& x = params.normalizationF->normalize(Base::phi(input));
    forwardComputation(x);
    return params.normalizationO->restore(h.back());
}

这是构造函数:

FFNeuralNetwork_(Features_<InputC, denseOutput>& phi, unsigned int neurons,
                 unsigned int outputs) :
    ParametricRegressor(phi, outputs), BatchRegressor_<InputC, arma::vec, denseOutput>(phi, outputs)
{
    layerFunction.push_back(new Sigmoid());
    layerFunction.push_back(new Linear());

    layerNeurons.push_back(neurons);
    layerNeurons.push_back(outputs);

    setupNetwork();
}

实际上:

 typedef FFNeuralNetwork_<arma::vec> FFNeuralNetwork;

FFNeuralNetwork是我在示例中使用的A类。

这是实际的工作代码:

BasisFunctions basisPlane_ = IdentityBasis::generate(1);
DenseFeatures phiPlane_(basisPlane_);
FFNeuralNetwork planeNet(phiPlane_, 10, 1);
cout << planeNet({0.5});

这里没有正常工作的代码:

FFNeuralNetwork createNetwork(..){
    BasisFunctions basisPlane_ = IdentityBasis::generate(1);
    DenseFeatures phiPlane_(basisPlane_);

    FFNeuralNetwork planeNet(phiPlane_, 10, 1);
    return planeNet;
}
..
FFNeuralNetwork net = createNetwork(..);
cout << net({0.5});

1 个答案:

答案 0 :(得分:2)

在这段代码中,您通过引用传递了一个局部变量phiPlane_

FFNeuralNetwork createNetwork(..){
    BasisFunctions basisPlane_ = IdentityBasis::generate(1);
    DenseFeatures phiPlane_(basisPlane_);

    FFNeuralNetwork planeNet(phiPlane_, 10, 1); // <- HERE
    return planeNet;
}

FFNeuralNetwork net = createNetwork(..);
cout << net({0.5});

一旦函数返回通过引用传递的对象不再存在,那么之后没有代码应该访问它。取决于ParametricRegressor(phi, outputs)中发生的情况,它可能会也可能不会正常,但对我来说似乎有点可疑并且可以解释您的问题。