Loop, function or memory problem: Loop variable in a function is limited automatically.

2 views (last 30 days)
Hi to all,
I am processing 3D images. In one of the functions i wrote, "for" loop variable is limited to 262144 while it should not be. My loop is just like :
For i = 1 : 26214400 %( 1 : 512*512*100 ) .... end
In case it is a memory problem, i deleted some data to get more space on the memory my script uses but it did not work. The limit value does not change. I tried it on both uint8 and double data.
By the way i use Windows 7, i have 4 GB Memory. I strongly need help about this.
Thanks to all.
Ibrahim
  7 Comments
Matt Fig
Matt Fig on 12 Apr 2011
So it works at the command line, it should work in the function. There is more to the story that we cannot see because we don't have the code....

Sign in to comment.

Accepted Answer

Ibrahim harmankaya
Ibrahim harmankaya on 12 Apr 2011
First of all, thank to you all. Well, i figured it out. I was usually setting end value of i as some value different than 26214400. So when Matt said about 512*512 which is 262144 i checked again some sub-functions called in my function. And i realized that my array limited by 512*512 by one of the sub-functions.
But the weird thing is that i would expect to get error when i try to reach (262144 + 1)th element.
Actually, i use the array to hold some indices and i check if there is any new indices added or not by using the next element of the array at the end of "for" loop :
%array was set by sub-functions as % array = zeros(262144) %and if there is no change in "i"th loop, array(i+1) is zero.
ind = 1; for i = 1 : n
if expression_a
array(ind) = exp1;
ind = ind + 1;
end
if expression_b
array(ind) = exp2;
ind = ind + 1;
end
if (array(i+1) = 0), break, end
end
Wouldn't that be the error like "Index exceeds matrix dimensions" ? Or do i miss something?
Thanks again. Is there anyone currently working on medical image processing?
  6 Comments
Ibrahim harmankaya
Ibrahim harmankaya on 13 Apr 2011
Well, i wrote it wrong here. Of course it would. But it is == in my .m file. Or it would never work because of syntax error.

Sign in to comment.

More Answers (2)

Jan
Jan on 12 Apr 2011
What exactly does "stops and quit" mean? Did you use the debugger to find out, which line causes the break? Just insert a "if i == 262144, disp('catch'); end" and set a break point on the disp line. Then step through the code line by line. It is impossible for us to guess, which command in which line is responsible.

Matt Fig
Matt Fig on 12 Apr 2011
Hmm, something weird is going on. Can you verify that this works at the command line:
for ii = 1:512*512*100,jj = ii/2;end,jj*2==512*512*100
Also, in your loop is there a BREAK or RETURN statement anywhere?

Categories

Find more on Loops and Conditional Statements 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!