Что-то непонятное получилось. Или я чего-то не понимаю. Память была выделена в стеке. Как выделить её в куче? Пробовал выделять больше, но всё равно в стеке выделяется. WTF?
$ valgrind --tool=massif ./realloc
...
==12198==
==12198== Total spacetime: 2,212,548 ms.B
==12198== heap: 0.0%
==12198== heap admin: 0.0%
==12198== stack(s): 99.8%
realloc.c:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
void checkp(void * p)
{
if( p == NULL ) {
printf("ERROR: Not enough memory\n");
exit(1);
}
}
int main( int argc, char ** argv )
{
//Store one number
int n = 1;
uint8_t *p;
p = (uint8_t *) malloc(n * sizeof(uint8_t)); checkp(p);
//Let's count
int i;
for(i=1; i<=255; i++)
{
if(i > n){
//We need more memory
n *= 2;
uint8_t *np;
np = (uint8_t *) realloc(p, n * sizeof(uint8_t)); checkp(np);
printf("Reallocated memory to %i bytes. Memory address:%i\n", n * sizeof(uint8_t), np);
p = np;
}
p[i-1] = i;
printf("p[%i] = %u\n", i-1, p[i-1]);
}
free(p);
return 0;
}