Le code suivant me donne un défaut de segmentation. Après le débogage, je découvre que le problème peut être résolu en déclarant le lambda comme auto plutôt que sur Function. Pourquoi est-ce le cas?Erreur de segmentation lors du stockage de lambda en tant que fonction std ::
#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;
}
Ce serait génial si je peux déclarer comme fonction parce que je voudrais passer cette expression lambda à d'autres classes.
L'erreur que j'ai quand func est déclarée comme fonction est:
Programme signal reçu SIGSEGV, Segmentation fault. 0x0000000000401896 dans std :: vector> :: size (this = 0x0) at /usr/include/c++/5/bits/stl_vector.h:655 655 {return taille_type (this -> _ M_impl._M_finish - this -> _ M_impl. _M_start); }
(gdb) backtrace
# 0 0x0000000000401896 dans std :: vector> :: size (ce = 0x0) à /usr/include/c++/5/bits/stl_vector.h:655
# 1 0x00000000004015aa dans std :: vector> :: vector (this = 0x7fffffffdc50, __x =) à /usr/include/c++/5/bits/stl_vector.h:320
# 2 0x0000000000400d12 dans main() à test.cxx: 18