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

3 Ansichten (letzte 30 Tage)
David Pesetsky
David Pesetsky am 18 Mär. 2015
Kommentiert: David Pesetsky am 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 Kommentare
David Pesetsky
David Pesetsky am 28 Mär. 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 am 28 Mär. 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).

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Jan
Jan am 28 Mär. 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 Kommentare
David Pesetsky
David Pesetsky am 31 Mär. 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 am 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.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Startup and Shutdown finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by