Problem ze zwalnianiem pamieci. Funkcja free().

0

Witam.

podczas zwalniania zaalokowanej pamieci w niektorych (bardzo rzadko ale jednak) zdarza sie taki blad

  • glibc detected *** free(): invalid next size (fast): 0x08049928 ***
    Przerwane (core dumped)

alokuje pamiec:
int* tablica;
tablica = (int*) malloc(sizeof(int)*(m-1));

zwalniam:
free(tablica);

Prosze o jakas porade mala, z gory dziekuje.

Pozdrawiam.

0

Sciagnij sobie valgrinda albo innego memory checkera i sprawdz tym swoj program. Pewnie masz cos w ogole zle w programie gdzie indziej - zwalniasz cos 2 razy, piszesz po niezainicjowanej pamieci albo przydzielasz new a zwalniasz free itp. Komunikaty systemu tego typu wcale nie musza wskazywac miejsca bledu i moga wystepowac duzo pozniej niz rzeczywiste wystapienie bledu. Skoro blad wystepuje sporadycznie, to w 99% masz blad gdzie indziej niz sie program wysypal.

Jesli program jest skomplikowany i duzo alokujesz / dealokujesz dynamicznie, to radzilbym skorzystac z jakiegos garbage collectora - to naprawde moze zaoszczedzic Ci ponad 30% czasu i wyeliminowac frustracje zwiazana z takimi bledami.

  • W stopce link do jedynego slusznego odsmiecacza. [green]
0

kontrolnie mozesz jeszcze sprawdzic, czy na ta tablice nie wskazuja inne wskazniki...
i czy przypadkiem nie pokazujesz wskaznikiem tablica na cos troche wiekszego
tudziez nie skopiowales tam wiekszego bloku pamieci???

pozdrawiam
kts

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