編輯:更新的代碼,以使兩個功能更類似於不明原因使用犰狳種類
我有一個lambda函數,當一些嘗試讀取導致崩潰使用犰狳類型的問題無效的內存位置。如果我將相同的表達式轉換爲正常的函數,一切都可以順利進行
所以,簡單的工作示例:
#define ARMA_USE_CXX11
#include <armadillo>
using namespace arma;
rowvec2 funcLambda(double value, const rowvec2 &vA, const rowvec2 &vB, const double &const1, const double &const2){
return min(vA * const1, vB * const2);
}
int main(void){
rowvec2 vA = {.12, .44};
rowvec2 vB = {2, 2};
auto const1 = double(1.2);
auto const2 = 3.1;
auto fLambda = [&](double value){ return min(vA * const1, vB * const2);};
rowvec2 z = rowvec2({0.0, 0.0});
// This works fine
z = funcLambda(100, vA, vB, const1, const2);
// This crashes
z = fLambda(100);
return 1;
}
這個例子崩潰,其中值得注意的是,有和沒有「使用命名空間ARMA;」包括帶有和不帶#define ARMA_USE_CXX11,並使用32位和64位存儲器地址。
我不知道我在lambda函數中做了什麼錯誤,或者如果它是犰狳引起的問題。如果我刪除等式的一部分(例如標量的乘法),它將正常工作。
任何幫助表示讚賞。
由於
的Henrik
我看到兩個區別。首先,lambda中的引用是'const&',而在函數中它們是'&'。其次,'funcLambda'構建,而'fLambda'確實分配。如果消除這些差異,行爲是否會改變? – Yakk 2015-02-10 15:57:02
@Yakk:我改變了對函數中const&的引用,並使得兩個函數調用都做了賦值。儘管如此。代碼在原始問題中更新。 – Henrik 2015-02-10 16:06:40