我一直在向量化我以前編寫的一些matlab代碼,在這個過程中,由於分割錯誤,matlab開始崩潰。我將問題簡化爲單一類型的計算:分配給多個結構屬性。迭代向量賦值時的Matlab分割錯誤
例如,這種形式的甚至自賦值執行幾千倍時最終導致一個賽格故障:
[my_class_instance.my_struct_vector.my_property] = my_class_instance.my_struct_vector.my_property;
我最初認爲這肯定是某種內存泄漏,所以嘗試在每次迭代後打印出java的可用內存,但這仍然相當穩定。
所以是的,完全不知所措現在,爲什麼這打破: -/
UPDATE:以下更改固定SEG斷層:
溫度= [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中工作正常,然後提到我發現的相同解決方法:使用臨時變量。
所以呀...
敢肯定這個問題與支持票結束,但如果任何敢於冒險的想拿一個鏡頭,爲什麼這個bug都存在,我肯定還是對這樣的答案感興趣。 (學習很有趣!)
什麼是您的Matlab版本? –
R2011a爲贏7 64位 – zergylord
不能幫你在這裏...我有R2010b在Linux 64位,它在那裏工作得很好。你有內存轉儲或類似的嗎? –