Re: malloc ( )

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Avinash,
On Wed, Aug 31, 2011 at 06:12:41PM +0530, Avinash Sonawane wrote:
> Respected Sir,
> I am using gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)
> 
> I have one doubt regarding malloc () in gcc.
GCC is right whatever happens, your code is illegal C (so you get
"undefined behaviour" :-)).
> When I tried to execute the program given below, it got executed.
> 
> But since 256 = 1 0000 0000 (9 bits) , How malloc can store it at 'p'
> since I have allocate only 1 byte of memory (8 bits of memory) ?
> Please guide me.
You are misunderstanding C. For general C-questions there are more
adequate mailing lists.
According to the C language, "256" is understood as an integer number of
type "int" with the value 256. The memory size (=number of bits needed &
used) for an "int" is ABSOLUTELY INDEPENDENT of its value -- "1" needs
as many bits as "256" (simply starting with some "0"-bits). The precise
size of an "int" depends on your hardware, the only limitation is that
it has to have at least 2 bytes (maybe that limit got increased with
newer C-standards?).
So: 256 needs 16 bits or more.

When you call now "malloc(1)", this library function returns you a
memory address at which you have at least 1 byte "free" which is
reserverd for you and won't be used by anybody else (if all code is
written correctly). You write now 2 or more bytes at this address. This
means:
 - the first byte is fine.
 - the second and all following bytes are written in a memory range,
   which MIGHT BE used for something else.
So many different things can happen:
 - nobody uses this region. Then the code runs fine (but nobody
   guarantees it will run correctly when you restart it).
 - the implementation of malloc on your machine always reserves MORE
   memory (e.g. 4 bytes) -- then your code works always ON YOUR MACHINE,
   you don't know what will happen on other machines
 - another variable of your program is stored there: then that variable
   is overwritten / might overwrite p
 - your operating system does not allow your program to access this
   memory address (e.g. because it was distributed to another user).
   Then your code get's killed by the operating system
 - ......


Axel


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux