在返回另一个函数的函数中执行程序期间出错
Error during program execution in function that returns another function
我尝试使用"std::function"调用"test"函数中的"testfun"函数,将变量数减少1并执行中间计算。
"A"类(向量)包含一个双精度的一维数组。
在执行过程中,程序在指定点终止,并在"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 */ }
相关文章:
- 类中私有结构的构造函数出错
- 字符串验证函数出错
- 我的类默认构造函数出错
- Dev-C++和Code::Blocks中的析构函数出错
- int对的哈希函数出错
- MSVC 编译器错误导致迭代器和友元函数出错
- 复制构造函数出错
- 使用 WinSock2 开发,使用 CreateThread() 函数出错
- 链接列表的Push_back函数出错
- 结构初始化中的隐式复制构造函数出错
- 异步函数出错
- 编译器错误消息错误:令牌之前的预期')' '*'。我的构造函数出错
- c++中使用std::bind和std::函数出错
- 在vector排序中使用c++模板函数出错
- 使用std::for_each lambda函数出错
- 二叉搜索树插入函数出错
- 调用类的函数出错
- c++使用删除函数出错
- 使用已删除的函数出错
- 调用构造函数出错