realloc - jak to działa?

0

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?

0

A rzeczywiście byka walnąłem :( Nie znaczy to od razu, że nie umiem czytać ze zrozumieniem :/

0

if((tmp = realloc(tab,20))!=NULL)
tab = tmp;

Jeśli nie alokujesz jakichś ogromnych połaci pamięci (rzędu gigabajta albo więcej) to sprawdzanie czy malloc/realloc się powiodło nie ma sensu.

Jedyna sytuacja w której zwróci null (dla prawidłowych parametrów) to brak pamięci, ale jeśli jest brak pamięci dla marnych 20 bajtów to cały system ci się prędzej bluescreenem wywali.

1 użytkowników online, w tym zalogowanych: 0, gości: 1