簡體   English   中英

C ++-SIGSEGV在向量上執行push_back <Mat>

[英]C++ - SIGSEGV doing push_back on a vector<Mat>

我正在開發一個Android應用,而我的本機代碼中有這個問題。

這些向量是全局的。

vector<Mat> listaMatDes;
vector<Mat> listaMatKey;
vector<int> listaCols;
vector<int> listaRows;

我也有此函數,其中描述符和關鍵點包含某些Mat的地址(使用此函數getNativeObjAddr()):

void rellenarObjetos(jlong* keyPoints, jlong* descriptors, jint* cols, jint* rows, int length){

    for(int i=0; i<length; i++){

        listaCols.push_back(cols[i]);
        listaRows.push_back(rows[i]);

        Mat* aux_des=(Mat*)descriptors[i];
        listaMatDes.push_back(aux_des->clone());

        Mat* aux_key=(Mat*)keyPoints[i];
        listaMatKey.push_back(aux_key->clone());
    }

}

我已經檢查了兩個輔助墊,它們創建得很好。

在0x00000001(代碼= 1)遇到此錯誤致命信號11(SIGSEGV),它是由以下行引起的

listaMatDes.push_back(aux_des->clone());

但我不知道為什么。

嘗試分離listaMatDes.push_back(aux_des->clone()); 在:

Mat m = aux_des->clone();
listaMatDes.push_back(m);

這樣,您可以查看錯誤是否確實在push_back中,我想可能是在克隆中。

一整天的編程使您發瘋(至少對我來說是愚蠢的),我從Java代碼傳遞了一個本地 Mat地址數組(使用函數getNativeObjAddr()創建的long [],該函數返回該Mat內存中的地址) ,所以它行不通...

我通過創建一個長數組作為類字段並傳遞此數組來解決它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM