清除所有变量崩溃matlab,清算dll记忆?

13个视图(30天)
我使用一个第三方通过墨西哥人接口dll。打开dll文件,并返回一个句柄打开文件。文件句柄是一个指针,它的值我通过Matlab。进行dll调用时,我通过指针值回墨西哥人文件,它会把文件句柄类型,然后使用的dll。
也有关闭方法文件。在Matlab的指针值被放置在一个类(指针对象)和删除方法。指针对象被删除时,调用dll(通过墨西哥人界面)关闭该文件。
事情似乎正常工作,除非我运行“清除所有”然后Matlab崩溃。
一些需要注意的地方:
  • 多个对象的指针对象作为财产
  • 只有一个指针对象持有的指针值
  • 根对象,拥有其他对象,并不持有对象属性的指针
  • 删除根(当没有其他变量存在于工作区),这将删除其他对象,不会导致系统崩溃
  • 如果我在墨西哥人文件重新编译,那么清晰的根对象,系统崩溃
在我这最后几个点似乎表明,事故来自Matlab清算dll的内存,然后我传递一个过时的文件句柄的指针。任何意义吗?如果是这样的话,我怎么解决它?
谢谢你,吉姆。
2的评论
吉姆Hokanson
吉姆Hokanson 2014年4月16日
编辑:吉姆Hokanson 2014年4月16日
所有的代码是:https://github.com/JimHokanson/adinstruments_sdk_matlab
我目前只开放一个文件一次虽然我想象希望能够打开超过一次。
我没有一个mexAtExit函数定义。
我不跟踪有效指针在墨西哥人,他们只有在对象的指针。
谢谢你,吉姆。

登录置评。

答案(2)

何塞•路易斯•
何塞•路易斯• 2014年4月16日
清除所有 几乎杀死一切(包括任何功能你可能加载)。你可以试试 clearvars 如果你想释放一些空间。
1评论
吉姆Hokanson
吉姆Hokanson 2014年4月16日
谢谢,但是我们的目标不仅仅是空闲内存,而是理解和防止程序崩溃。

登录置评。


太Tam
太Tam 2018年1月18日
编辑:太Tam 2018年1月18日
你好,
最近我也遇到类似的问题。我不知道如果我引起OP是一样的,但在我的情况下,错误是由于释放两次相同的资源。MATLAB调用“全部清除”时,它将调用对象的析构函数。如果文件处理已经被释放了(比如close()函数),然后再析构函数可能试图免费资源,导致错误。
外部DLL函数可能会超过关闭文件时试图免费资源(如文件进行完整性检查),所以释放两次可能会导致问题。
解决方案是双重检查资源没有在继续之前释放。

类别

找到更多的在启动和关闭帮助中心文件交换

s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!