On 11/20/05, Andrew Pinski <[EMAIL PROTECTED]> wrote: > > > > Hi Everyone, > > > > int > > main () > > { > > int *p; > > int i; > > > > p = (int *) malloc (400 * sizeof (int)); > > for (i = 0; i < 512; i++) > > { > > p[i] = i; > > printf ("p[%d]: %d\n", i, p[i]); > > } > > return 0; > > } > > > > The following code should terminate with Segmentation fault, right ? > > But when I tried, it works even beyond the limits of allocated area ... > > I am using Glibc - 2.3.2-11.9 , gcc - 3.2.2 > > > > Is it a bug - malloc's implementation in Glibc. > > Does malloc allocates a complete 4k page for certain size of memory asked > > for? > > > > Infact, it gives a segmentation fault at 1681 location => > > p[1681]: 1681 > > Segmentation fault > > > > Or is it using Heap area ? > > First why do you think this is a GCC bug?
Actually i felt that if its not coming up witha segmentation fault, Then might be something goes behind during the compile time. How much memory is actually allocated by the malloc, I googled through the sources of Glibc but i was not able to find any info. If I am wrong somewhere please help. > Second you are invoking undefined behavior by accessing passed the array > bounds (or allocated > bounds by malloc). I didnt get your point. I am allocating space only for 400 inregers then as soon as in the loop if it crosses the value of 400 , it should have given a segementation voilation ? But is isint. Fine i agree this is not the job of the compiler, It might never come into exesitence during the execution time, But Still me must get a segmentation voilation by the operating system. Regards, Sandeep