realloc nie działa tak jak jest opisane w "kompendium". Miał przepisać starą zawartość do nowej i uciąć to na co zabrakło miejsca albo wstawić śmieci w miejscu, o które obszar został zwiększony. Tymczasem program taki jak poniżej:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *tab = malloc(10*sizeof(int));
int *tmp;
int i;
for(i=0; i<10; i++)
tab[i] = i;
for(i=0; i<10; i++)
printf("%d ",tab[i]);
printf("\n");
if((tmp = realloc(tab,20))!=NULL)
tab = tmp;
for(i=0; i<10; i++)
printf("%d ",tab[i]);
return 0;
}
daje wyniki:
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 446111691 20848 6493504 6488256
Dlaczego tak się dzieje?