gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:16:33 24 4
gpt4 key购买 nike

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

“A”类( vector )包含一维 double 组。

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

#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);
}

最佳答案

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

在下面的函数中

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;
}

返回的 lambda 通过引用位接收 f anon() 通过拷贝接收 f

因此,当您在 外部 anon() 调用返回的 lambda 时,它包含对 f 的悬空引用。

建议:尝试通过复制将 f 传递给 lambda。

// ....................................V  f by copy
std::function<double(A*)> result = [&, f](A * param_)
{ /* lambda content */ }

关于c++ - 在返回另一个函数的函数中执行程序时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56258759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com