このコードがクラッシュするのはなぜですか?C++ 11:std :: bindがラムダでクラッシュする
#include <iostream>
#include <functional>
int main(int argc, const char * argv[])
{
std::function<void(int)> function = [](int)
{
};
auto binding = std::bind(function, 10);
std::function<void()> jobFunctor = binding; // crashes here with EXC_BAD_ACCESS
return 0;
}
jobFunctor
に結合の結果を変換する場合std::function
コンストラクタにおける無限スタック再帰があります。
私は、私はlibcの++を使用してXcodeの5.0.2でこのコードをコンパイルし、コンパイラのバージョンのMac OS X 10.8.5を実行している:私はこのコードが動作する必要があることをかなり確信している、とすることを
LO50F-04-198BX:$ clang++ --version
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin12.5.0
Thread model: posix
gcc 4.8でクラッシュせず、Linuxではclang 3.4、Windowsではgcc 4.8.1をクラッシュさせません。 – Rapptz
これはOS X 10.9.1でもクラッシュします。この場合、セグメンテーションフォルトは、std :: bind内の無限回数の再帰的な関数呼び出しでスタックをオーバーフローさせるためです。 –
それは正常に動作するはずです:http://ideone.com/GXGIBx – Snps