将标准:设置为<int> jintArray
Convert std:set<int> into jintArray
我提供了一个std::set<int>
对象,我需要转换/复制到jintArray
中以返回到Android应用。我尝试了下面的代码,但是它似乎只是用它作为线索崩溃了:
致命信号11(sigsegv(,代码1(segv_maperr(,故障addr 0x2 19975
我怀疑这是演员,但我不确定正确的方法。theId
绝对是int
。请参阅下面的代码:
std::set<int> speciesSet = someFunctionThatReturnsASet();
speciesIDSet = env->NewIntArray(speciesSet.size());
int count = 0;
for ( std::set<int>::iterator itr=speciesSet.begin(); itr != speciesSet.end(); itr++ ) {
try {
int theId = *itr;
// This is the last line of code that runs.
env->SetIntArrayRegion(speciesIDSet, count, 1, (jint*)theId);
count++;
}
catch (const std::exception& e) {
std::cout << e.what();
}
catch (...) {
std::cout << "oops";
}
}
SetIntArrayRegion()
期望数组作为源缓冲区。您正在尝试一次将其传递为1 int
的"数组"。很好,但是正如另一个答案所指出的那样,您需要使用(jint*)&theId
而不是(jint*)theId
来做到这一点。
另一个选项是首先创建一个实际数组,然后仅调用SetIntArrayRegion()
一次复制整个数组:
std::set<int> speciesSet = someFunctionThatReturnsASet();
std::vector<int> speciesVec(speciesSet.begin(), speciesSet.end());
speciesIDSet = env->NewIntArray(speciesVec.size());
env->SetIntArrayRegion(speciesIDSet, 0, speciesVec.size(), reinterpret_cast<jint*>(speciesVec.data()));
我想,您想编写(jint*)&theId
而不是(jint*)theId
。
第二个说,您想将该数字解释为Jint*指针。但是您想要jint*指向数字。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- 没有显式声明的int[]中的foreach
- 在c++中访问int到类对象的映射时出错
- 为什么我无法更改"set<set>"循环中的值<int>
- EASTL矢量<向量<int>>连续的
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- 'structstd::对<int,int>'没有名为'push_back'