2

私はこのような機能を持っています:

void cb( void *obj )
{
    if(nullptr != obj)
    {
        auto f = static_cast< function<void()>* >(obj);
        (*f)();
    }
}

そして、私はそれを次のように使用します:

auto obj = new function<void()> ( bind(&AClass::AMethod, &x) );
cb(obj);

ここで、AClass はクラス、AMethod は AClass のメソッド、x は AClass のインスタンスです。

問題は、cb 内の std::function へのポインターを削除するとプログラムがクラッシュする理由です。

void cb( void *o )
{
    if(nullptr != o)
    {
        auto f = static_cast< function<void()>* >(o);
        (*f)();
        delete f; // <===
    }
}

cb への呼び出し後にそれを削除している間はそうではありませんか?

auto obj = new function<void()> ( bind(&AClass::AMethod, &x) );
cb(obj);
delete obj; // <===
4

1 に答える 1

2

これはg++ 4.8.1clang 3.4の両方で正常に動作します。また、どちらもvalgrindの興味深いものは何も示していません。問題はコードの別の場所にあるか、コンパイラのバージョンに関連している可能性がありますか?

上記の両方の場所で削除をテストしました。

于 2013-10-03T22:30:23.150 に答える