使用std :: function w / std :: bind时的EXC_BAD_ACCESS

时间:2013-11-06 18:40:56

标签: c++ xcode c++11 compiler-construction libstdc++

使用带std :: bind的std :: function升级到XCode 5之后,似乎正在生成EXC_BAD_ACCESS异常。看起来std :: function实现中的__base指针最终为null,导致访问不良,但我不清楚为什么会出现这种情况。有没有人能够洞察我做错了什么?

以下是说明问题的示例代码。

struct A
{
    void foo(bool b)
    {
        std::cout << b << std::endl;
    }

    void go()
    {
        // ok
        auto a = std::bind(&A::foo, this, std::placeholders::_1);
        a(true);

        // ok
        std::function<void(A*, bool)> b = std::bind(&A::foo, std::placeholders::_1, std::placeholders::_2);
        b(this, true);

        // ok
        std::function<void(A*, bool)> c = std::bind(&A::foo, this, std::placeholders::_2);
    c(this, true);

        // EXC_BAD_ACCESS
        std::function<void(bool)> f = std::bind(&A::foo, this, std::placeholders::_1);
        f(true);
    }
};
...
...

A a;
a.go();

1 个答案:

答案 0 :(得分:0)

似乎这可能是一个已修复的错误。我有一个类似的问题(std::bind to a std::function crashes with Clang),解决方案只是从XCode 5.0.1升级到XCode 5.0.2。

我尝试了你的代码,它似乎可以正常使用XCode 5.0.2(没有尝试使用5.0.1)。