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



我正在开发一个Android应用程序,我在我的本机代码中有这个问题。

这些向量是全局的

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

我也有这个函数,其中描述符和关键点包含一些Mats的地址(使用这个函数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());
    }
}

我检查了两个辅助垫,它们创建得很好。

我有这个错误致命信号11 (SIGSEGV)在0x00000001 (code=1),这是由行

引起的
listaMatDes.push_back(aux_des->clone());

但我不知道为什么

尝试分隔listaMatDes.push_back(aux_des->clone());:

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

这样,你可以看到错误是否真的在push_back中,我会说它可能在克隆中

编程一整天让你疯狂(和愚蠢,至少对我来说),我是从java代码传递LOCAL mat地址数组(长[]创建使用函数getNativeObjAddr()返回mat内存中的地址),所以它不会工作…

我通过创建一个长数组作为类字段并传递该数组来解决这个问题。

相关内容

  • 没有找到相关文章

最新更新