c++android ndk与array配合使用
c++ android ndk work with array
我有一个大问题,我不使用c++。我通过jni将一个数组从java传递给c++,我想在c++内部创建一个相同长度的新数组。这是以下代码:
#include <string.h>
#include <jni.h>
extern "C"
{
JNIEXPORT void JNICALL Java_com_profesionphotostudio_pps_Imageprocessing_process(JNIEnv* env, jobject thiz, jintArray pixelArray, jintArray ddimensions, jint function)
{
int *pixels = env->GetIntArrayElements( pixelArray, 0);
jsize length = env->GetArrayLength(pixelArray);
int *d= env->GetIntArrayElements(ddimensions, 0);
int i, j, pixel, red, green, blue, h,w;
w=d[0]; h =d[1];
int *temppixel= new int[length];
for(i=0; i<=w*h; i++)
{
temppixel[i]=-1;
}
delete [] temppixel;
env->ReleaseIntArrayElements( pixelArray, pixels, 0);
env->ReleaseIntArrayElements(ddimensions, d, 0);
}
但我收到这个错误:
Fatal signal 11 (SIGSEGV) at 0x00097756 (code=1), thread 9082 (photostudio.pps)
当我手动设置时
length = 100000;
我的代码运行得很好。我也试着设置
length = w*h;
但我收到了相同的致命信号错误
在ddidimensions数组中,我保留位图的高度和宽度,pixelArray包含该位图的int值
更换
for(i=0; i<=w*h; i++)
通过
for(i=0; i<w*h; i++)
或者,您将访问超出其边界的数组(数组索引从0
到n-1
)。
无论w
和h
的值是多少(至少是正数),代码都有效:
int h = 10;
int w = 15;
int *temppixel = new int[w*h];
for(i=0; i<w*h; i++)
{
temppixel[i] = -1;
}
delete [] temppixel;
这在C++中是绝对有效的。如果它仍然崩溃,那么问题一定来自其他地方(那么你需要隔离问题)。
因为函数中没有正确计算数组的长度,所以应该是这样的:
jsize length=env->GetArrayLength(env,pixelArray);
相关文章:
- 如何使用ndk-build.cmd构建Android.so文件
- Android NDK传感器向事件队列报告奇怪的间隔
- Android NDK 编译 LAME HAVE_MPGLIB > 'interface.h' 文件未找到
- C++11 中不同类型的对象的 std::array 的替代方案
- constexpr begin of a std::array
- C++如果必须在编译时确定大小,std::array 有什么意义?
- NDK:如何通过ndkr15c包含"RefBase.h"?
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 为什么使用 NDK 不能存在不同的 stl 实现?
- OpenGL VBO Indexing ( How to compute Index Array)
- 标准::unordered_map 中的 std::array 的值初始化
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 确保编译时的特定 std::array 位置
- std::array的长度有大小限制吗?
- 将 std::array 移动到另一个 std::array
- 首先按给定顺序打印所有数字,然后使用 Array 打印所有字符和其他符号
- 在 constexpr 构造函数 (c++17) 中赋值到 const char * 在使用 Android NDK 时
- 如何在 android ndk 上链接 C 和 C++ 代码,以及 C 和 C++ 运行时库(包括 STL)?
- 为什么 std::shared_ptr 被认为是"heavy"和"expensive",但 std::array "same perfprmance as plain (c-style) arrays
- c++android ndk与array配合使用