Re: Jemalloc SEGV for 1MB chunk

From: Christoph Mallon <christoph.mallon_at_gmx.de>
Date: Wed, 28 Jan 2009 13:30:06 +0100
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:30:09 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:41 UTC