以下代碼給出了分段錯誤。調試完成後,我發現問題可以通過將lambda聲明爲auto而不是Function來解決。爲什麼會這樣?將lambda存儲爲std :: function時出現分段錯誤
#include <functional>
#include <iostream>
#include <vector>
typedef std::vector<double> Vec;
typedef std::function<const Vec&(Vec)> Function;
int main()
{
//Function func = [](const Vec& a)->Vec /*this give me segfault*/
auto func = [](const Vec& a)->Vec /*this work just fine??*/
{
Vec b(2);
b[0] = a[0] + a[1];
b[1] = a[0] - a[0];
return b;
};
Vec b = func(Vec{1,2});
std::cout << b[0] << " " << b[1] << "\n";
return 0;
}
這將是巨大的,如果我可以聲明爲功能,因爲我想 這個lambda表達式傳遞給一些其他類。
,我有當func被聲明爲函數是錯誤:
計劃接收信號SIGSEGV,分割過錯。 在std :: vector> :: size(this = 0x0)中的0x0000000000401896在/usr/include/c++/5/bits/stl_vector.h:655 655 {return size_type(this - > _ M_impl._M_finish - this - > _ M_impl。 _M_start); }
(GDB)回溯
#0 0x0000000000401896中的std ::矢量> ::大小(此爲0x0 =)在/usr/include/c++/5/bits/stl_vector.h:655
#1 0x00000000004015aa在std :: vector> :: vector(this = 0x7fffffffdc50,__x =) at /usr/include/c++/5/bits/stl_vector.h:320
#2 0x0000000000400d12 main()at test.cxx:18