C++ 在返回另一个函数的函数中执行程序时出错

C++ 在返回另一个函数的函数中执行程序时出错,c++,lambda,C++,Lambda,我尝试使用“std::function”调用“test”函数中的“testfun”函数,将变量数减少1,并执行中间计算 “A”类(向量)包含一个一维双精度数组 在执行过程中,程序在指定点终止,并在“const auto _Impl=_Getimpl();”上打开“functional”文件线路。如何解决这个问题 #include <functional> class A { public: double* d; unsigned s; A(unsigned

我尝试使用“std::function”调用“test”函数中的“testfun”函数,将变量数减少1,并执行中间计算

“A”类(向量)包含一个一维双精度数组


在执行过程中,程序在指定点终止,并在“const auto _Impl=_Getimpl();”上打开“functional”文件线路。如何解决这个问题

#include <functional>

class A
{
public:
    double* d;
    unsigned s;

    A(unsigned size)
    {
        s = size;
        d = new double[s];
    }
};

double testfun(A* param, A* x)
{
    return param->d[0] + param->d[1] * x->d[0];
}

std::function<double(A*)> anon(std::function<double(A*, A*)> f, A& x, A& y)
{
    std::function<double(A*)> result = [&](A * param_)
    {
        // Program fails somewhere at that point

        double sum = 0.0;

        for (unsigned i = 0; i < x.s; i++)
            sum += f(param_, &x) - y.d[i];

        return sum;
    };

    return result;
}

double test(std::function<double(A*, A*)> f)
{
    A x(1); A y(1);
    x.d[0] = 0.0;
    y.d[0] = 2.0;

    A* param = new A(2);
    param->d[0] = 2.0; param->d[1] = 6.0;

    std::function<double(A*)> func = anon(f, x, y);

    return func(param);
}

void main()
{
    double t = test(testfun);
}
#包括
甲级
{
公众:
双*d;
未签名的s;
A(无符号大小)
{
s=尺寸;
d=新的双[s];
}
};
双重测试乐趣(A*param,A*x)
{
返回参数->d[0]+参数->d[1]*x->d[0];
}
std::函数anon(std::函数f、A&x、A&y)
{
std::function result=[&](A*参数)
{
//程序在那个点的某个地方失败了
双和=0.0;
for(无符号i=0;id[0]=2.0;参数->d[1]=6.0;
函数func=anon(f,x,y);
返回函数(参数);
}
void main()
{
双t=测试(testfun);
}

不确定这是唯一的问题,但这是一个问题

在下面的函数中

std::function<double(A*)> anon(std::function<double(A*, A*)> f, A& x, A& y)
{
    std::function<double(A*)> result = [&](A * param_)
    {
        // Program fails somewhere at that point

        double sum = 0.0;

        for (unsigned i = 0; i < x.s; i++)
            sum += f(param_, &x) - y.d[i];

        return sum;
    };

    return result;
}

main
的返回类型必须是
int
“程序在指定点终止”:指定方式?我添加了注释,其中程序失败将“void”改为“int”似乎不是解决方案=)这是未定义的行为
anon
引用
f
,但是
f
是本地的,您在
result
中有悬空引用。是的,这似乎是个问题。如何正确编码?我试图创建“f”的副本,比如
std::function f1=f但这会导致相同的结果error@Perotto-根据答案末尾的建议,尝试通过复制将
f
传递给lambda:
std::function result=[&,f](A*param)
// ....................................V  f by copy
std::function<double(A*)> result = [&, f](A * param_)
 { /* lambda content */ }