From owner-freebsd-current@FreeBSD.ORG Wed Jan 28 12:20:56 2009 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 72B4110658C1 for ; Wed, 28 Jan 2009 12:20:56 +0000 (UTC) (envelope-from danny@cs.huji.ac.il) Received: from kabab.cs.huji.ac.il (kabab.cs.huji.ac.il [132.65.16.84]) by mx1.freebsd.org (Postfix) with ESMTP id 2486A8FC13 for ; Wed, 28 Jan 2009 12:20:55 +0000 (UTC) (envelope-from danny@cs.huji.ac.il) Received: from pampa.cs.huji.ac.il ([132.65.80.32]) by kabab.cs.huji.ac.il with esmtp id 1LS9Pa-000NBW-Ct; Wed, 28 Jan 2009 14:20:54 +0200 X-Mailer: exmh version 2.7.2 01/07/2005 with nmh-1.2 To: Channa In-reply-to: <515c64960901280401w1e1d08bfx29adc124bc749c4a@mail.gmail.com> References: <515c64960901280339m17fa9309v2e1bc3f55454ab@mail.gmail.com> <49804597.6040303@gmx.de> <515c64960901280401w1e1d08bfx29adc124bc749c4a@mail.gmail.com> Comments: In-reply-to Channa message dated "Wed, 28 Jan 2009 17:31:43 +0530." Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Wed, 28 Jan 2009 14:20:54 +0200 From: Danny Braniss Message-ID: Cc: Christoph Mallon , freebsd-current@freebsd.org Subject: Re: Jemalloc SEGV for 1MB chunk X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 28 Jan 2009 12:21:00 -0000 > Hi, > Thanks for your reply. > You mean to say i should modify the test as below: > > #include > #include > #include > > > 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 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 > > > #include > > > #include > > > > > > 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" >