Java Jna,随机无效内存访问错误

Java Jna,随机无效内存访问错误,java,kotlin,jna,Java,Kotlin,Jna,我有一个小毛病 基本上,每当我释放某些几何3d模型(基站或控制器)的内存时,我就会得到错误: “java.lang.Error:内存访问无效” 这是我目前正在使用的,它加载并释放蒸汽安装文件夹中存在的模型列表的x倍: for (i in 0..99) models.forEach(::loadRenderModel) fun loadRenderModel(renderModelName: String) { var error: EVRRenderModelError

我有一个小毛病

基本上,每当我释放某些几何3d模型(基站或控制器)的内存时,我就会得到
错误

“java.lang.Error:内存访问无效”

这是我目前正在使用的,它加载并释放蒸汽安装文件夹中存在的模型列表的x倍:

for (i in 0..99)   models.forEach(::loadRenderModel)

fun loadRenderModel(renderModelName: String) {

    var error: EVRRenderModelError

    val rm = vrRenderModels!!

    val pModel = PointerByReference()
    while (true) {
        error = rm.loadRenderModel_Async(renderModelName, pModel)
        if (error != EVRRenderModelError.Loading) break
        Thread.sleep(1)
    }
    val model = RenderModel.ByReference(pModel.value)

    if (error != EVRRenderModelError.None) {
        System.err.println("Unable to load render model $renderModelName - ${error.getName()}")
        return // move on to the next tracked device
    }

    try {
        rm freeRenderModel model
    } catch (e: Error) {
        System.err.println(e)
    }
    println()
}
RenderModel
struct-in:

struct RenderModel\t
{
const RenderModel_Vertex_t*ServerTexData;//网格的顶点数据
uint32\u t unVertexCount;//顶点数据中的顶点数
const uint16_t*rIndexData;//索引到每个三角形的顶点数据中
uint32\u t unTriangleCount;//网格中的三角形数。索引计数为3*TriangleCount

TextureID\u t diffuseTextureId;//会话唯一纹理标识符。共享相同纹理的渲染模型将具有相同的id。我在您的代码中发现了一个错误,但我无法确认这是您失败的原因。它肯定会产生这些错误

你说

val error = EVRRenderModelError.None
然后

if (error != EVRRenderModelError.None) {
这是一个持续的
false
条件。通常会有一个IntelliJ检查来警告您这些错误,但它可能会在您的配置中被禁用


您应该使用
var error
,并在异步调用的繁忙等待循环中重新分配它。

您是否拥有指向
loadRenderModel\u async
提供的内容的指针的有文档记录的契约?抱歉,但您的确切意思是什么?一些文档我想知道工厂函数是否正在进行缓存,w这将使你作为客户端释放内存是非法的。显然,从文档中,调用方负责释放指针。是的,对,我相应地修改了它(这是一些旧代码的残余),但看起来不是原因
val error = EVRRenderModelError.None
if (error != EVRRenderModelError.None) {