C++学艺不精看不懂这个错,请各位大佬帮忙看一下这里为什么会报一个Use After Free
啊。
Result<pcrepp, pcrepp::compile_error> pcrepp::from_str(std::string pattern, int options)
{
const char *errptr;
int eoff;
auto code = pcre_compile(pattern.c_str(),
options | PCRE_UTF8,
&errptr,
&eoff,
nullptr);
if (!code) {
return Err(compile_error{errptr, eoff});
}
return Ok(pcrepp(std::move(pattern), code));//这一行报错
}
//报错信息
//call to `Result` eventually accesses memory that was invalidated by call to `free()` on line 86 indirectly during the call to `Ok`.
//84. }
//85.
//86. return Ok(pcrepp(std::move(pattern), code));
// ^
//87. }
//88.
Ok
方法
template<typename T, typename CleanT = typename std::decay<T>::type>
types::Ok<CleanT> Ok(T&& val) {
return types::Ok<CleanT>(std::forward<T>(val));
}
Result
的构造函数
Result(types::Ok<T> ok)
: ok_(true)
{
storage_.construct(std::move(ok));
}
谢谢各位大佬了[抱拳]
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.