Skip to content

GetStructProperty存在内存无法释放与访问野指针的问题 #561

@sanyuefeiyu

Description

@sanyuefeiyu

在GetStructPropertyImplementation的实现中,Property的访问与使用存在两个问题。以访问FMatrix中FPlane属性为例。

  • 1 运行过程中,内存不能释放

    FoundAddress为FMatrix Native侧的内存地址,基于该地址可以获取到各个FPlane属性Native侧的内存地址。

Image
获取该FMatrix对象的FPlane对象GCHandle。如果是首次Get某个Property,则需要为该FPlane创建一个Mono对象。
Image
该FPlane的Mono对象随后会被加入到HandleMap中,并且被设置成bPinned。
Image
后续,FMatrix被GC时,只会Free释放FMatrix的GCHandle,不会Free释放成员属性的GCHandle。成员属性的GCHandle,只能在FCSharpEnviroment析构时,才能Free GCHandle。

因此,随着程序的运行,此类内存会持续增加。运行一段时间后,内存占用高,会存在OOM风险。
  • 2 野指针访问风险
    同上,FMatrix被GC时,也会释放FMatrix Native侧的内存地址。如果业务代码在C#层保存了其成员属性对象,那么再读写其成员属性对象,会访问野指针,导致程序异常退出。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions