malloc take some contiguous part of heap for some variable,
-------------
| p |
-------------
again malloc happens for some other pointer
------------- -----------------
| P | S |
------------- -----------------
Now realloc happens for p
------------------- -----------
| p | S |
------------------- -----------
So S space is reduced??? Does it happen?
I ran a program like this,
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p;
char *s;
p = malloc(sizeof(*p));
printf("1:p points to %p\n", (void *)p);
//printf("1:p points to %p\n", (void *)(p+1));
s = malloc(sizeof(*s));
printf("1:s points to %p\n", (void *)s);
p = realloc(p, sizeof(*p)*2);
printf("2:p+2 points to %p\n", (void *)(p+2));
p = realloc(p, sizeof(*p)*7);
printf("3:p points to %p\n", (void *)(p));
printf("3:p+7 points to %p\n", (void *)(p+7));//should run over s's memory
printf("2:s points to %p\n", (void *)s);
free(p);
p = NULL;
free(s);
s = NULL;
return 0;
}
output:
1:p points to 0x1291010
1:s points to 0x1291030
2:p+2 points to 0x1291018
3:p points to 0x1291050 --> location of p pointed to by p is changed.
3:p+7 points to 0x129106c
2:s points to 0x1291030
So first malloc gave 0x20 = 32 bytes on its own?? 0x1291030 - 0x1291010 = 0x20 = 32 bytes.
Is it possible that if I keep increasing size of memory pointed by 'p' will lead me to s's pointed memory and then i can access s using p?
P.S
edited the question to correctly say what I wanted to say. realloc will allocate some other place in memory once the memory of s is threatened to be stomped. Its clearly visible in output.
realloc
is not guaranteed to keep the original address. It will allocate a larger region elsewhere and bit-wise copy the contents of P. – StoryTeller - Unslander Monicarealloc
will return a pointer to a new piece of memory (where it has copied to old contents to). The heap may reserve space after an allocation to cope with reallocs. No "bits" are allocated, only bytes and probably suitably alligned on ` 4 or 8 byte boundary. – Paul Ogilvierealloc
but in your code you usecalloc
, and neverfree
your first allocation. I struggle to make sense from your reasoning. – Kami Kaze