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 工具箱)
问题的核心似乎是你所@sf%1@期望的@只是看看这个,我可以想到几种可能性:
sf%1@被插入到原来的之后@@sf%1@取代了原来的位置@@sf%1附加在原件之前@我实际上会打赌第三个,但以下是我能想到的可能导致此问题的最合乎逻辑的场景:
@s或@sf以及一些分隔字符。总而言之,这并不能解释为什么在控制台中运行整个程序会很顺利,但也许你只是运行了其中的一部分。在这种情况下,这些可能是需要注意的事情。