MATLAB 中的匿名函数损坏。“@sf%”是什么意思?

Mem*_*ing 5 matlab anonymous-function

我被 MATLAB 中的分段错误难住了。它似乎是由从 mat 文件加载的匿名函数引起的。最初的匿名函数句柄是:

@(x)scaledNlfun(x,@logexp1,1e3) 
Run Code Online (Sandbox Code Playgroud)

但是当它加载时,它变成了:

@sf%1@(x)scaledNlfun(x,@logexp1,1e3)
Run Code Online (Sandbox Code Playgroud)

似乎没问题,当我在命令行中调用它时,但它会在函数中创建分段错误(或分段违规)。不是函数调用本身,而是之后的几行。在调试模式下,如果我单步执行语句,也没有问题。

堆栈跟踪显示一堆

[  0] 0x00002b20b97baba4 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+04127652
Run Code Online (Sandbox Code Playgroud)

它发生在 Linux 2.6.18-371.3.1.el5 SMP 上的 MATLAB 2012a 和 2013a 上。

此函数句柄使用“-v7.3”选项保存在parfor循环中,因为包含句柄的结构太大。如果我在加载 mat 文件后替换匿名函数,一切正常,所以我认为 matlabload函数有一个错误。

不幸的是,我无法创建一个最小的示例来重现错误。我尝试使用“-v7.3”在 parfor 中保存匿名函数句柄,但没有其他复杂的数据结构,它似乎工作正常。但是我有 80 个 mat 文件,它们会可靠地使 matlab 崩溃(其中许多超过 1GB)。

无论如何,有人知道“@sf%”是什么意思吗?(这不是 stateflow 工具箱)

Den*_*din 0

问题的核心似乎是你所@sf%1@期望的@只是看看这个,我可以想到几种可能性:

  1. 不知何故sf%1@被插入到原来的之后@
  2. 以某种方式@sf%1@取代了原来的位置@
  3. 以某种方式@sf%1附加在原件之前@

我实际上会打赌第三个,但以下是我能想到的可能导致此问题的最合乎逻辑的场景:

  1. 也许有一个看不见的炭?
  2. 也许是某种奇怪的字符转换?
  3. 可能是一种情况,变量中存储了两个东西而不是一个。也许类似于@s@sf以及一些分隔字符。

总而言之,这并不能解释为什么在控制台中运行整个程序会很顺利,但也许你只是运行了其中的一部分。在这种情况下,这些可能是需要注意的事情。