2007-09-27 15:15:50

by mahamuni ashish

[permalink] [raw]
Subject: Floating Point Issue

I have small code....

#include <stdio.h>
#include <string.h>

int main()
{
float f= 1256.35;
char ch[4];

printf("\n1. f : %f",f);
memset(ch,'\0',strlen(ch) );
printf("\n2. f : %f",f);
return 0;
}

Expected output is
1. f : 1256.35
2. f : 1256.35

But I am getting the output
(on windows)
1. f : 1256.35
2. f : 0.000000

(on Linux)
1. f : 1256.35
segmentation fault

why?


Forgot the famous last words? Access your message archive online at http://in.messenger.yahoo.com/webmessengerpromo.php


2007-09-27 15:18:06

by Jan Engelhardt

[permalink] [raw]
Subject: Re: Floating Point Issue


On Sep 27 2007 12:41, mahamuni ashish wrote:
>I have small code....

This is not a kernel problem. (Read your C book and/or ask in
a C newsgroup.)

>char ch[4];
>memset(ch,'\0',strlen(ch) );

2007-09-27 15:21:23

by Xavier Bestel

[permalink] [raw]
Subject: Re: Floating Point Issue

On Thu, 2007-09-27 at 12:41 +0100, mahamuni ashish wrote:
> int main()
> {
> float f= 1256.35;
> char ch[4];
>
> printf("\n1. f : %f",f);
> memset(ch,'\0',strlen(ch) );

Can't work. ch[]'s content is undefined, so strlen(ch) may read anywhere
in memory, and/or memset() write anywhere.

Xav


2007-09-27 15:29:48

by Al Viro

[permalink] [raw]
Subject: Re: Floating Point Issue

On Thu, Sep 27, 2007 at 12:41:41PM +0100, mahamuni ashish wrote:
> I have small code....
>
> #include <stdio.h>
> #include <string.h>
>
> int main()
> {
> float f= 1256.35;
> char ch[4];
>
> printf("\n1. f : %f",f);
> memset(ch,'\0',strlen(ch) );

strlen() applied to uninitialized array => undefined behaviour.

What does that have to do with the kernel, anyway?

2007-09-27 18:25:25

by Trond Myklebust

[permalink] [raw]
Subject: Re: Floating Point Issue

On Thu, 2007-09-27 at 12:41 +0100, mahamuni ashish wrote:
> I have small code....
>
> #include <stdio.h>
> #include <string.h>
>
> int main()
> {
> float f= 1256.35;
> char ch[4];
>
> printf("\n1. f : %f",f);
> memset(ch,'\0',strlen(ch) );
> printf("\n2. f : %f",f);
> return 0;
> }
>
> Expected output is
> 1. f : 1256.35
> 2. f : 1256.35
>
> But I am getting the output
> (on windows)
> 1. f : 1256.35
> 2. f : 0.000000
>
> (on Linux)
> 1. f : 1256.35
> segmentation fault
>
> why?

'cos 'strlen(ch)' isn't defined until you've initialised ch. If you swap
that line out with 'memset(ch, '\0', sizeof(ch))' then it will work.

Not a kernel bug, and hence not appropriate material for this list.

Trond

2007-09-27 20:53:21

by linux-os (Dick Johnson)

[permalink] [raw]
Subject: Re: Floating Point Issue



If Windows lets you get away with this, then Windows is broken.
memset(ch,'\0',strlen(ch) );

'ch' is uninitialized local data. Nobody knows what evil lurks...


Thay said, the kernel will make sure that any data that gets
put into your address-space doesn't contain anybody else's
information --that's all. The junk on your stack was created
by your task.


On Thu, 27 Sep 2007, mahamuni ashish wrote:

> I have small code....
>
> #include <stdio.h>
> #include <string.h>
>
> int main()
> {
> float f= 1256.35;
> char ch[4];
>
> printf("\n1. f : %f",f);
> memset(ch,'\0',strlen(ch) );
> printf("\n2. f : %f",f);
> return 0;
> }
>
> Expected output is
> 1. f : 1256.35
> 2. f : 1256.35
>
> But I am getting the output
> (on windows)
> 1. f : 1256.35
> 2. f : 0.000000
>
> (on Linux)
> 1. f : 1256.35
> segmentation fault
>
> why?
>
>
> Forgot the famous last words? Access your message archive online at http://in.messenger.yahoo.com/webmessengerpromo.php
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

Cheers,
Dick Johnson
Penguin : Linux version 2.6.22.1 on an i686 machine (5588.29 BogoMips).
My book : http://www.AbominableFirebug.com/
_


****************************************************************
The information transmitted in this message is confidential and may be privileged. Any review, retransmission, dissemination, or other use of this information by persons or entities other than the intended recipient is prohibited. If you are not the intended recipient, please notify Analogic Corporation immediately - by replying to this message or by sending an email to [email protected] - and destroy all copies of this information, including any attachments, without reading or disclosing them.

Thank you.

2007-09-27 21:01:42

by Jan Engelhardt

[permalink] [raw]
Subject: Re: Floating Point Issue


On Sep 27 2007 16:53, linux-os (Dick Johnson) wrote:
>
>If Windows lets you get away with this, then Windows is broken.
>memset(ch,'\0',strlen(ch) );

No, probably just the chance that the memory to which ch points
had a nul in it or in the near bytes.

Use valgrind, move along.

>On Thu, 27 Sep 2007, mahamuni ashish wrote:
>
>> I have small code....
>>
>> #include <stdio.h>
>> #include <string.h>
>>
>> int main()
>> {
>> float f= 1256.35;
>> char ch[4];
>>
>> printf("\n1. f : %f",f);
>> memset(ch,'\0',strlen(ch) );
>> printf("\n2. f : %f",f);
>> return 0;
>> }
>>
>> Expected output is
>> 1. f : 1256.35
>> 2. f : 1256.35
>>
>> But I am getting the output
>> (on windows)
>> 1. f : 1256.35
>> 2. f : 0.000000
>>
>> (on Linux)
>> 1. f : 1256.35
>> segmentation fault
>>
>> why?
>>
>>
>> Forgot the famous last words? Access your message archive online at http://in.messenger.yahoo.com/webmessengerpromo.php
>>
>> -
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at http://www.tux.org/lkml/
>>
>
>Cheers,
>Dick Johnson
>Penguin : Linux version 2.6.22.1 on an i686 machine (5588.29 BogoMips).
>My book : http://www.AbominableFirebug.com/
>_
>
>
>****************************************************************
>The information transmitted in this message is confidential and may be privileged. Any review, retransmission, dissemination, or other use of this information by persons or entities other than the intended recipient is prohibited. If you are not the intended recipient, please notify Analogic Corporation immediately - by replying to this message or by sending an email to [email protected] - and destroy all copies of this information, including any attachments, without reading or disclosing them.
>
>Thank you.
>-
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to [email protected]
>More majordomo info at http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at http://www.tux.org/lkml/
>

2007-09-28 02:37:11

by Cong Wang

[permalink] [raw]
Subject: Re: Floating Point Issue

On Thu, Sep 27, 2007 at 05:17:44PM +0200, Jan Engelhardt wrote:
>
>On Sep 27 2007 12:41, mahamuni ashish wrote:
>>I have small code....
>
>This is not a kernel problem. (Read your C book and/or ask in
>a C newsgroup.)

Please goto comp.lang.c for help. ;)

--
"Bill, look, we understand that you're interested in selling us this
operating system, but compare it to ours. We can't possibly take such
a retrograde step."

2007-09-28 08:32:18

by Bernd Petrovitsch

[permalink] [raw]
Subject: Re: Floating Point Issue

On Don, 2007-09-27 at 12:41 +0100, mahamuni ashish wrote:
> I have small code....

And the relevance to the Linux kernel as such is?
[....]

Add "-Wall -Wextra" and fix all errors and warnings.

> Expected output is

No.

Bernd
--
Firmix Software GmbH http://www.firmix.at/
mobil: +43 664 4416156 fax: +43 1 7890849-55
Embedded Linux Development and Services