分段错误C++,括号运算符后



我有一个覆盖括号运算符的类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});

在这段代码中,您将通过引用传递一个局部变量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)发生的事情,它可能会也可能不可以,但这对我来说似乎有点可疑,可以解释您的问题。

相关内容

  • 没有找到相关文章

最新更新