How can I increase Memory
Show older comments
Dear friends
I used a "for" loop in my M.file codes and I used "fopen" and "fclose" functions in "for" loop.
After 508 iterations, MATLAB has been stopped and following message showed:
"??? Error using ==> fprintf
Invalid file identifier. Use fopen to generate a valid file identifier."
I think, MATLAB faced Low memory problem because by closing software and starting again MATLAB can continue to remain iterations. Therfore I need to a function to increase MATLAB memory. The "clear all" is not useful.
Regards
Accepted Answer
More Answers (3)
The best method to increase memory is installing more RAM and using a 64 bit version of Matlab.
But in your case the error message is unequivocally an invalid file identifier. This is a completely other problem and not related to memory. It means that you have tried to open a not existing file. This should be checked in every case:
FID = fopen(FileName, 'r');
if FID == -1
error('Cannot open file for reading: [%s]', FileName);
end
The square brackets in the message helped me to recognize unexpected file names like control characters or spaces.
It is strongly recommended to include the path in the file name, because the current directory can change for unexpected reasons, e.g. GUI or TIMER callbacks.
Another problem can be that the closing of the files is not successful. Check this by:
list = fopen('all')
The list of files, which can be open at the same time, is limited by the operating system. Usually the need to have more than 20 file opened is a clear argument for a bad program design.
When you call
fid=fopen(...)
do you check whether fid=-1? E.g.,
if fid==-1
keyboard
end
You need to do so, to be sure MATLAB has found the file. If you run with the above, the code will pause when it can't find the file and you can investigate why from the K>> prompt.
3 Comments
Mohsen
on 6 Jan 2013
Matt J
on 6 Jan 2013
You shouldn't reach the error if you've inserted
if fid==-1
keyboard
end
before the fid is used.
Image Analyst
on 6 Jan 2013
Then just put
if fid == -1
continue;
end
and it will just skip that file and continue on.
Konrad Malkowski
on 6 Jan 2013
0 votes
A few questions:
- What operating system are you using?
- Do you close the previously open files?
The reason for these questions is that most operating systems limit the number files (file descriptors) that can be opened by a user/process/operating system at any given time.
1 Comment
Walter Roberson
on 7 Jan 2013
Especially with the "508" being meantioned. MATLAB uses 3 file descriptors internally, so the problem is showing up after 511 open files, which is almost certainly a system limit of some kind.
Categories
Find more on Entering Commands 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!