Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Jan 2009 14:20:54 +0200
From:      Danny Braniss <danny@cs.huji.ac.il>
To:        Channa <channa.kad@gmail.com>
Cc:        Christoph Mallon <christoph.mallon@gmx.de>, freebsd-current@freebsd.org
Subject:   Re: Jemalloc SEGV for 1MB chunk 
Message-ID:  <E1LS9Pa-000NBW-Ct@kabab.cs.huji.ac.il>
In-Reply-To: <515c64960901280401w1e1d08bfx29adc124bc749c4a@mail.gmail.com> 
References:  <515c64960901280339m17fa9309v2e1bc3f55454ab@mail.gmail.com>  <49804597.6040303@gmx.de> <515c64960901280401w1e1d08bfx29adc124bc749c4a@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
> Hi,
> Thanks for your reply.
> You mean to say i should modify the test as below:
> 
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> 
> 
> int main()
> {
> int i;
> char *buf;
> size_t size = 1048576 ;
> 
>         buf = malloc(size);
>   for (i = 0; i <= 1048575; i++)
>     buf[i] = 'a';
> buf[size]='\0';
> printf("The length of buff is : %d\n",strlen(buf));
> free(buf);
> return 0;
> }
> 
> I NULL terminated the string
> buf[size] = '\0'  <== The last character is NULL
> 
> But still i get a SEGV at strlen.
> 
> Could you please tell me if my changes above are correct?
> 
clear case of off by one.
you are requesting 'size' bytes, indexing starts at 0, all the way to size-1
which is ALL the bytes you malloc'ed
then you zero the size+1 byte, ah, btw, it's not strlen that is SEGV'ing.

danny

> Regards,
> Channa
> 
> 
> On 28/01/2009, Christoph Mallon <christoph.mallon@gmx.de> wrote:
> > Channa schrieb:
> >
> >
> > > Hi All,
> > > I am using jemalloc.c source from FreeBSD-current source.
> > > When i allocate 1MB of memory using malloc() and use it as the below
> > > test shows
> > >
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > > #include <string.h>
> > >
> > > int main()
> > > {
> > >        int i;
> > >        char *buf;
> > >        size_t size = 1048576 ;
> > >
> > >        buf = malloc(size);
> > >        for (i = 0; i < 1048576; i++)
> > >                buf[i] = 'a';
> > >        printf("The length of buff is : %d\n",strlen(buf));
> > >        free(buf);
> > >        return 0;
> > > }
> > >
> > > When i try to call strlen(buf) SEGV is recived.
> > >
> > > This behaviour is seen when only for 1MB chunk if i allocate
> > > memory lesser than 1MB no issues noticed.
> > >
> > > Could anyone see similar problem?
> > > Is the above test wrong?
> > > Or some issue with huge memory allocation in jemalloc?
> > >
> > > Your response will be very helpful.
> > >
> > > Thanks & Regards,
> > > Channa
> > >
> >
> >  You did not NUL-terminate ('\0') the string.
> >
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
> 





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E1LS9Pa-000NBW-Ct>