我被MATLAB中的分段错误所困扰。 它似乎是由一个从mat文件加载的匿名函数引起的。 原始的匿名函数句柄是:
@(x)scaledNlfun(x,@logexp1,1e3)
但是当它被加载时,它变为:
@sf%1@(x)scaledNlfun(x,@logexp1,1e3)
似乎没问题,当我在命令行中调用它时,它会在函数中创建分段错误(或分段违例)。不是函数调用本身,而是之后的几行。在调试模式下,如果我单步执行该语句,也可以。
堆栈跟踪显示了一堆
[ 0] 0x00002b20b97baba4 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+04127652
它出现在Linux 2.6.18-371.3.1.el5 SMP上的MATLAB 2012a和2013a上。
此函数句柄使用' - v7.3'选项保存在parfor循环中,因为包含句柄的结构太大了。如果我在加载mat文件后替换匿名函数,一切正常,所以我认为matlab load
函数有错误。
不幸的是,我无法创建一个重现错误的最小示例。我尝试使用'-v7.3'保存parfor中的匿名函数句柄,但没有其他复杂的数据结构,它似乎工作正常。但我有80个mat文件可以可靠地崩溃matlab(其中许多超过1GB)。
无论如何,有人知道“@ sf%”是什么意思吗? (这不是州流工具箱)
答案 0 :(得分:0)
问题的核心似乎是@sf%1@
您希望@
看到sf%1@
,我可以想到一些可能性:
@
@sf%1@
替换代替原始@
@sf%1
附加之前原始@
我实际上打赌第三个,但这是我能想到的最合理的情况,可能会导致这个问题:
@s
或@sf
以及一些分隔字符。总而言之,这并不能解释为什么如果你在控制台中运行整个程序它会顺利,但也许你只是运行它的一部分。在这种情况下,这些可能是需要注意的事情。