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

4 views (last 30 days)
David Pesetsky
David Pesetsky on 18 Mar 2015
Commented: David Pesetsky on 1 Apr 2015
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 Comments
David Pesetsky
David Pesetsky on 28 Mar 2015
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 on 28 Mar 2015
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).

Sign in to comment.

Answers (1)

Jan
Jan on 28 Mar 2015
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 Comments
David Pesetsky
David Pesetsky on 31 Mar 2015
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 on 1 Apr 2015
...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.

Sign in to comment.

Categories

Find more on Startup and Shutdown in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!