我们是否应该删除/释放 Get<PrimitiveType>ArrayRegion 返回的 C 指针数组?

问题描述 投票:0回答:1

调用 JNI 函数时

Get<PrimitiveType>ArrayRegion
它始终保证返回一个 C 类型数组,该数组是原始 jarray 中指定区域的副本。

Oracle 文档:获取ArrayRegion

将原始数组的一个区域复制到缓冲区中的一系列函数。

这是否意味着我们应该调用

free()
delete []
它在我们之后返回的指针 完成了吗?

因为不像 GetArrayElements 有自己相应的 ReleaseArrayElements 在模式为

0
JNI_ABORT
时释放原始缓冲区,
Get<PrimitiveType>ArrayRegion
似乎没有那个......所以我的问题是。

c++ java-native-interface
1个回答
1
投票

我们应该释放/删除[]

Get<PrimitiveType>ArrayRegion
返回的指针吗?

操作是复制操作,将数组中的some数据复制到缓冲区中。它不“获取”或数组,也不返回指针。 (文档说返回类型是

void
。)

不像

Get<PrimitiveType>ArrayElements
,文档没有提到发布或免费的方法,任何需要发布或免费的东西。


如果我们将相应的

Get<PrimitiveType>ArrayElements
模式设置为
Release<PrimitiveType>ArrayElements
,我们是否应该释放/删除[]由
JNI_COMMIT
返回的指针,因为这种模式也不释放缓冲区?

文档不是 100% 清楚,但我的阅读是你 do 在这种情况下需要释放/删除缓冲区。请注意,文档说明:

“其他选项 [例如

JNI_COMMIT
] 使程序员可以更好地控制内存管理,应格外小心使用。”

© www.soinside.com 2019 - 2024. All rights reserved.