迭代向量赋值时的 Matlab 分割错误
我一直在对以前编写的一些matlab代码进行矢量化,在此过程中,由于分割错误,matlab开始崩溃。我将问题缩小到单一类型的计算:分配给多个结构属性。
例如,即使此表单的自分配在执行数千次时最终也会导致 seg 错误:
[my_class_instance.my_struct_vector.my_property] = my_class_instance.my_struct_vector.my_property;
我最初认为这一定是某种内存泄漏,所以尝试在每次迭代后打印出java的可用内存,但这仍然相当稳定。
所以,是的,现在完全不知道为什么这会中断:-/
更新:以下更改修复了 seg 错误:
temp = [my_class_instance.my_struct_vector];
[temp.my_property] = temp.my_property;
[my_class_instance.my_struct_vector] = temp;
现在的问题是为什么这会解决任何问题。也许是关于重复访问句柄类而不是结构列表的事情?
更新2:情节变厚
我终于复制了这个问题,并使用一个虚拟程序轻松地在这里发布:
一个简单的类:
classdef test_class
properties
test_prop
end
end
还有一个程序,它用类做了一堆向量赋值,并且总是会崩溃。
test_instance = test_class();
test_instance.test_prop = struct('test_field',{1 1});
for i=1:10000
[test_instance.test_prop.test_field] = test_instance.test_prop.test_field;
end
更新3:剧情变薄
原来我发现了一个错误。根据Matlab技术支持,类属性的重复向量分配在R2011a中根本不起作用(可能在早期版本中也是如此)。他告诉我它在R2012a中工作正常,然后提到了我发现的相同解决方法:使用临时变量。
所以是的...
可以肯定的是,这个问题以支持票结束,但是如果任何大胆的人想尝试为什么存在这个错误,我肯定会对这样的答案感兴趣。(学习很有趣!