[英]C++ Builder bccarm error when calling std::vector::push_back with TObject descendant
[英]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.