1
A
回答
1
要开始,在C中不能返回数组类型。在你的问题中,你引用了“C中的一个数组,表示为long * val”。这不是一个数组。正如你应该知道的,long *
是指向的指针。那么,为什么这很重要?因为你正在返回一个指针。不是数组。这意味着您需要确保指针指向的内存将在用户尝试引用时分配。 C中的常见错误是返回指向自动存储中分配的内存的指针(即在函数本身的堆栈帧中),这是错误的。如果你从一个函数返回一个指针,那么这个指针指向的内存可能是:在该函数之上的一个栈帧上,所以我们知道它仍然被分配,例如分配给内存的main()
,被分配的静态内存(例如全局数组)或分配给堆的内存(例如由malloc()
返回的内存)。
免责声明:堆,栈及以上的其它术语绝对没有做标准C.出于实用的目的,我认为他们的存在,但你的目的,试图获得的想法,你不应该” t指向不存在的内存,然后取消引用您的指针。
现在,因为这涉及到JNI和Java,所以有一些问题。首先,Java数组不是以与数组相同的方式放置在内存中的。在Java中,不能保证数组的元素将被连续存储。我认为还有其他许多问题,但我并不完全是这个领域的专家。
那么,有什么解决方案?
选择一种方法。您要么必须登录copy your array of long into a Java jLongArray as outlined in this post,要么设计一个API来访问您在Java中用C分配的内存。
但是,没有选择将指向数组的指针返回给Java,并且只是访问它的C风格。 Java没有指针,而Java不是C.
1
您需要比log * val更多的值,还需要C数组中的项数。然后你只需将它转换为一个这样大小的数组。
相关问题
- 1. java中的指数增长,返回类型的双打数组
- 2. 返回由C数组到Java与SWIG
- 3. 返回未知长度数组从c到Swift结构
- 4. 返回NULL指针,从“长整型”到“对象*”
- 5. Java返回类型 - 长整型转换 - IntelliJ抱怨?
- 6. 从C函数返回二维字符数组到Java JNI
- 7. 数组的长度不返回到0
- 8. java-construct从2D整数数组返回设置为2D整数数组
- 9. 返回数组从C++ dll到matlab
- 10. 返回从C多维数组到Lua
- 11. Java的长整型
- 12. 在java中找到整型数组中的模式长度?
- 13. 从C++返回2d数组
- 14. Sum方法返回长整型值
- 15. 从java servlet返回一个数组列表到C#
- 16. c将整型数组到Java int数组JNI
- 17. 返回类型Java和C#
- 18. 将数组从C#编组到C++并返回:PInvokeStackImbalance
- 19. Java返回数组
- 20. 返回类型(长+长)
- 21. 从模型到控制器的组合和返回数组 - CodeIgniter
- 22. 将Java对象数组返回给C++
- 23. 将C++数组返回到C#
- 24. 返回数组C++
- 25. 从函数C++返回2dim数组
- 26. 从C++函数返回一个数组
- 27. 从函数返回数组c
- 28. 从C++函数返回数组
- 29. 从C++返回对象到Java
- 30. Evaluatejsonpath返回完整数组
为什么-1?请评论并告诉我为什么。 – JuiCe