爲什麼此代碼崩潰?C++ 11:std :: bind與lambda崩潰
#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
構造無限堆棧遞歸。
我運行Mac OS X 10.8.5,我編譯這段代碼的Xcode 5.0.2使用的libC++編譯器的版本:
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
不會在linux上的gcc 4.8和clang 3.4或Windows上的gcc 4.8.1上崩潰。 – Rapptz
這也在OS X 10.9.1下崩潰。在這種情況下,分段錯誤是由於在std :: bind中使用無數次遞歸函數調用使堆棧溢出所致。 –
它應該工作正常:http://ideone.com/GXGIBx – Snps