Hi, Thanks for the reply. Does the same behaviour seen on FreeBSD environment? I am using FreeBSD libraries to test the test code. So according to you its better to NULL terminate in the test code to avoid this undefined behaviour? Thanks , Channa On 28/01/2009, Christoph Mallon <christoph.mallon_at_gmx.de> wrote: > Channa schrieb: > > > Hi, > > Thanks for the reply. > > > > I understand , after terminating the string with NULL character no SEGV is > seen. > > > > But if i change the request size to a value less than 1MB for eg: 4096 > Bytes, > > > > As in the below test code: > > > > #include <stdio.h> > > #include <stdlib.h> > > #include <string.h> > > > > int main() > > { > > int i; > > char *buf; > > size_t size = 4096 ; > > > > buf = malloc(size); > > for (i = 0; i < size; i++) > > buf[i] = 'a'; > > printf("The length of buff is : %d\n",strlen(buf)); > > free(buf); > > return 0; > > } > > > > I dont see any issues, without terminating the string with NULL > > character the test code works fine. The issue is seen only for size > > 1MB exactly. > > > > Can anyone explain this behaviour? > > > > Undefined behaviour and (bad) luck. You are reading random garbage from > memory. For a large allocation like 1MB you get page aligned memory and the > page after the allocation is very likely not mapped, so you get a segfault > when you try to access it. > This really does not belong on freebsd-current_at_. >Received on Wed Jan 28 2009 - 11:37:19 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:41 UTC