Search the web
Sign In
New User? Sign Up
c4swimmers · India's First C/C++ Programming Portal
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Show off your group to the world. Share a photo of your group with us.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
Strange Behavior   Message List  
Reply | Forward Message #8756 of 9145 |
Re: [c4swimmers.net] Re: Strange Behavior

Hi,

It goes to infinite loop because you are using the for loop wrong.
when you have done s[30], you have allocated s[0] to s[29]. Now if you
try to write anything to s[30], then you will be actually writing to
another variable, and in this case you are writing to the variable p
and making it 0. Now because p became 0, the for loop starts all over
again.

To make it simpler, this is how the allocation of stack will look like
for the function change():

c[0], c[1], ......c[29], s[0], s[1],.........,s[29], p, min, i, coin.

Now say s[29] will be at an address 100, then p will be at an address
104(if you consider int size as 4 bytes). In the for loop, you are
checking for p<=30. So when p becomes 30, you enter the loop and make
s[30]=0. s[30] will be calculated as address 104, which is nothing but
the variable p. So you will be assigning p to 0. so the loop starts
over again.

so to correct this, either you make c[30] and s[30] to c[31] and
s[31], or change the for loop to

for (p=0; p<n; p++)

Regards,
Srinivas.

On 11/15/08, suraj_joshi22 <suraj_joshi22@...> wrote:
> --- In c4swimmers@yahoogroups.com, Mallik <hi_malli2k3@...> wrote:
>>
>> Hi All,
>>
>> Could you please help me out in analysing this issue:
>>
>> I really find strange behavior with the following code. If the
> statement b is present as below, the for loop is executing infinitely.
> But when statement b is replaced with statement a as
>> int c[31], s[31];. Then the for loop is exited after n iterations.
> Below is my gcc version where i executed the code. Please help me out
> in this regard.
>>
>> int c [30], s[30]; // statement b
>>
>> #include <stdio.h>
>> void change (int a[], int, int);
>> int main ()
>> {
>> int d[3];
>> d[0] = 1, d[1] = 10, d[2] = 25;
>> int n = 30, k = 3;
>> change (d, k, n);
>> return 1;
>> }
>>
>> void change (int d[], int k, int n)
>> {
>> int c [30], s[30]; // statement b
>> c[0] = 0;
>> int p;
>> int min, i, coin = 0;
>>
>> for (p=1; p<=n; p++)
>> {
>> c[p] = 0;
>> s[p] = 0;
>> printf ("\n test : %d \n", p);
>> }
>> }
>>
>> gcc (GCC) 4.1.2 (Gentoo 4.1.2 p1.0.2)
>> Copyright (C) 2006 Free Software Foundation, Inc.
>> This is free software; see the source for copying conditions. There
> is NO
>> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
> PURPOSE.
>>
>> --
>> Thanks & Regards,
>> Mallik
>>
>>
>>
>>
>>
>> Dude it did not get into an infinite loop....Compiled using dev c++
> ver 4.9.9.0
>
>
>
>



Mon Nov 17, 2008 9:56 am

srini_g2003
Offline Offline
Send Email Send Email

Forward
Message #8756 of 9145 |
Expand Messages Author Sort by Date

Hi All, Could you please help me out in analysing this issue: I really find strange behavior with the following code. If the statement b is present as below,...
Mallik
hi_malli2k3
Offline Send Email
Nov 9, 2008
4:23 pm

That is because you are overwriting on memory location of variable p. If you print address of p and c, you'll find that memory for variable p is allocated...
Shantanu
shantanu_bed...
Offline Send Email
Nov 13, 2008
1:57 pm

Try doin it like this: #define SIZE 30 int c [SIZE], s[SIZE]; // statement b #include <stdio.h> void change (int a[], int, int); int main () { int d[3]; d[0] =...
ravi sundriyal
ravisundriyal@...
Send Email
Nov 13, 2008
1:57 pm

... statement b is present as below, the for loop is executing infinitely. But when statement b is replaced with statement a as ... Below is my gcc version...
suraj_joshi22
Offline Send Email
Nov 17, 2008
7:55 am

Hi, It goes to infinite loop because you are using the for loop wrong. when you have done s[30], you have allocated s[0] to s[29]. Now if you try to write...
srinivas g
srini_g2003
Offline Send Email
Nov 17, 2008
12:16 pm

Yes, Even i observed such cases where it didnot get into infinite loop and sometimes i'm getting a segmentation fault. I think that its an atypical behavior....
Mallik
hi_malli2k3
Offline Send Email
Nov 18, 2008
9:15 am
Advanced

Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help