Mat file corrupt? I'm not so sure...

조회 수: 7 (최근 30일)
David Pesetsky
David Pesetsky 2015년 3월 18일
댓글: David Pesetsky 2015년 4월 1일
Hi,
I have a random issue where the following line in my code:
data = load(job_output_filenames{job_index});
ends up generating a message that it's unable to load that mat file, and it may be corrupt. Maybe 50% of the time. Yet every time I drag it into Matlab, it opens fine, and I see 4 variable cell arrays, all looking OK. Could it possibly be memory, or heap space? I have 600mb heap now...if I go too much higher, Matlab says it cannot open, so it reduces back to 128mb.
If it happens again, I can capture exact error messages if it helps....
Dave
  댓글 수: 7
David Pesetsky
David Pesetsky 2015년 3월 28일
I see no errors when I load it, either by the load command or drad and drop. And now, I ran the script again and it had no issues. It is a seemingly random issue. I think there is a memory issue? Or maybe a reboot I did helped? Do you see anything I could do better with the format of that AoA array?
Geoff Hayes
Geoff Hayes 2015년 3월 28일
David - I don't see any issue with the AoA, and combining variables with different dimensions shouldn't be a problem (most everyone does this).

댓글을 달려면 로그인하십시오.

답변 (1개)

Jan
Jan 2015년 3월 28일
The file is valid. If you obeserve random problems, there must be a random source for this, e.g. a corrupted hard disk or a failing network connection. So check this at first.
Another problem, which looks random, although it is not, is omitting the path of the file. Then Matlab searchs the file in the current folder, but e.g. a timer or GUI callback can change the current folder unexpectedly. If the unexpected current folder contains a damaged file with teh same name, it is hard to detect this. Therefore it is strongly recommended to include the full path of a file in evey case.
  댓글 수: 3
David Pesetsky
David Pesetsky 2015년 3월 31일
Ah ha. I see a pause block just before the erroring block of code. The way this is working, Matlab spawns several parallel processes, and needs to wait until writing some mat files is complete, and then it puts the parallelly created mat files together as one. Here's the block befor the trouble spot:
% Wait for jobs to finish
while ~prod(done_flags)
dir_out=dir('job_*_out.mat');
for k2=1:length(dir_out)
job_index = strmatch(dir_out(k2).name, job_output_filenames);
if ~isempty(job_index) && ~done_flags(job_index)
done_flags(job_index) = 1;
disp(['Job FINISHED with output file ' job_output_filenames{job_index}]);
end
end
pause(0.01);
end
I'll play with the lenghth of puase time. But there's probably a better way to do whatever it's doing....
David Pesetsky
David Pesetsky 2015년 4월 1일
...so, putting a 5 second pause between the Wait block, and the block that needed to manipulate the data and was having troubles, seemed to fix it. I guess Matlab was still busy writing to arrays.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Startup and Shutdown에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by