Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java jna问题结构访问内存无效_Java_C_Jna - Fatal编程技术网

java jna问题结构访问内存无效

java jna问题结构访问内存无效,java,c,jna,Java,C,Jna,对不起我的英语,我来自法国 我正在用java开发一个工具,我使用JNA调用C代码 我对函数进行了编码,它有以下错误: Exception in thread "main" java.lang.Error: Invalid memory access at com.sun.jna.Native.invokeInt(Native Method) at com.sun.jna.Function.invoke(Function.java:383) at com.sun.jna.F

对不起我的英语,我来自法国

我正在用java开发一个工具,我使用JNA调用C代码

我对函数进行了编码,它有以下错误:

Exception in thread "main" java.lang.Error: Invalid memory access
    at com.sun.jna.Native.invokeInt(Native Method)
    at com.sun.jna.Function.invoke(Function.java:383)
    at com.sun.jna.Function.invoke(Function.java:315)
    at com.sun.jna.Library$Handler.invoke(Library.java:212)
    at $Proxy0.light(Unknown Source)
    at ApicallIn.getpar.main(getpar.java:285)
我使用了几个函数,所有函数都工作,但其中一个有结构,该结构的编码如下:

typedef struct {
    double      a_value;
    double      b_value;
    int         ctatus;
} iPoint_Struct;
我必须使用以下函数:

int light( char **light_names, int num_light, int **num_points, iPoint_Struct ***datalightlist);
Java:

public static class iPoint_Struct extends Structure {

 public iPoint_Struct() {}
            public iPoint_Struct(Pointer pointer){
                super(pointer);
                read();
            }
            public List<? > getFieldOrder() {
                return Arrays.asList("a_value", "b_value", "ctatus");
            }


            public static  class sByValue extends getpar.iPoint_Struct implements Structure.ByValue {};
                public double a_value;
                public double b_value;
                public int ctatus;
                public static  class sByReference extends getpar.iPoint_Struct implements Structure.ByReference {};

        }
运行该函数时,出现以下错误:

Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.invokeInt(Native Method)
at com.sun.jna.Function.invoke(Function.java:383)
at com.sun.jna.Function.invoke(Function.java:315)
at com.sun.jna.Library$Handler.invoke(Library.java:212)
at $Proxy0.light(Unknown Source)
at ApicallIn.getpar.main(getpar.java:285)
char**
的用法如下:

param_names= (char ) malloc( 3000* sizeof( char * ) ); 
for( i = 0; i < 3000; i++ ) { 

param_names[i] = GetName( i ); 
fprintf( stderr, "%s\n", param_names[i] ); } if( light( &param_names[1],1, &numPoints, &data ) != SUCCESS 
param_names=(char)malloc(3000*sizeof(char*);
对于(i=0;i<3000;i++){
参数名称[i]=GetName(i);
fprintf(stderr,“%s\n”,param_names[i])if(light(¶m_names[1],1,&numPoints,&data)!=SUCCESS

如何用java编写?
char**
用java编写?谢谢

如果我正确阅读了您的声明,
light
正在“返回”指向
struct*
数组的指针,因此在尝试提取数据时,您可能错误地初始化了Java
Structure
实例。您认为Java中的代码是正确的吗?我可以用Java将字符**写为字符串吗?
char**
在Java中不是
String
。它可能是本机strin的数组g、 或者指向指针的指针,具体取决于它的使用方式。如果
参数名
是一个本机字符串数组,那么传入一个Java
字符串数组
;JNA将自动为您转换为
字符*
数组,甚至在最后抛出一个空值。感谢您的回答,在c中字符**的用法如下这是:param_names=(char)malloc(3000*sizeof(char*);for(i=0;i<3000;i++){param_names[i]=GetName(i);fprintf(stderr,“%s\n”,param_names[i]);if(light(¶m_names[1],1,&numPoints,&data)!=SUCCESS)…我能用java写char做些什么?谢谢更新你的问题。
param_names= (char ) malloc( 3000* sizeof( char * ) ); 
for( i = 0; i < 3000; i++ ) { 

param_names[i] = GetName( i ); 
fprintf( stderr, "%s\n", param_names[i] ); } if( light( &param_names[1],1, &numPoints, &data ) != SUCCESS