Date: Wed, 28 Jan 2009 13:13:49 +0100 From: Rink Springer <rink@FreeBSD.org> 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: <20090128121349.GJ16902@rink.nu> 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,
On Wed, Jan 28, 2009 at 05:31:43PM +0530, Channa wrote:
> 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?
They are not - because size = 1048576, you will get a buffer of 1048576
bytes, that is, buf[0] ... buf[1048575] = buf[0] .. buf[size - 1]. Thus,
you need to do:
buf[size - 1] = '\0';
And it'll work.
Regards,
--
Rink P.W. Springer - http://rink.nu
"Chance favours the prepared mind"
- Penn
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090128121349.GJ16902>
