围绕变量“...”的堆栈已损坏

Posted

技术标签:

【中文标题】围绕变量“...”的堆栈已损坏【英文标题】:Stack around the variable '...' was corrupted 【发布时间】:2018-10-16 10:53:09 【问题描述】:

在调试模式下的 MSVC 15.8.5 上,我明白了

运行时检查失败 #2 - 围绕变量“insert_into”堆叠 已损坏。

MSVC 中是否存在错误或我做错了什么?

在 clang 版本 6.0.0-1ubuntu2 和 clang 版本 7.0.0-svn341916-1~exp1~20180911115939.26 上运行良好

#include <set>

template <typename... T>
struct Overload : T...

//support struct for combining and overloading multiple lambdas
    using T::operator()...;
;
template <typename... T>
Overload(T...)->Overload<T...>;

using BuiltSet = std::set<std::string>;

template <typename... Args>
BuiltSet MakeBuildSet(const Args&... args)

//takes a list of arguments if an argument is a 
// BuiltSet each element is added to headers, 
// otherwise the arg itself is added to headers
    BuiltSet headers;

//Construct a lambda with overloading on if argument is a BuiltSet or not
    const Overload insert_into
        [](const BuiltSet& h, BuiltSet& headers) 
            headers.insert(h.begin(), h.end());
        ,
        [](const auto& arg, BuiltSet& headers)  
            headers.insert(arg); 
        
    ;
//Fold over arguments applying the lambda on each element
    (insert_into(args, headers), ...);
    return headers;


int main(int argc, char** argv)

    MakeBuildSet(MakeBuildSet("a", "b", "c"), "a", "b", "c");
    return 0;

【问题讨论】:

也许您可以在代码中添加一些 cmets 以便我们知道它应该做什么? @LightnessRacesinOrbit 完成 加载更好:) 【参考方案1】:

MSVC bug 所以这是编译器的一个缺陷。

【讨论】:

以上是关于围绕变量“...”的堆栈已损坏的主要内容,如果未能解决你的问题,请参考以下文章

变量周围的堆栈已损坏(将 long long 转换为字节数组)

变量“Yarray”周围的堆栈已损坏

如何修复“调试错误!,变量'x'周围的堆栈已损坏”?

VS2010 和 OpenCV:变量周围的堆栈已损坏

c++ 运行时检查失败 #2 - 变量“ToSend22”周围的堆栈已损坏

运行时检查失败 #2 - 变量周围的堆栈已损坏