1) Postępowanie z pamięci dynamicznej nie jest wykonywana przez kompilator. Istnieją biblioteki uruchomieniowe, które się tym zajmują. Na przykład : glibc zapewnia interfejsy API takie jak malloc i free, które wewnętrznie wywołują systemowe wywołania (sys_brk), aby obsłużyć obszar sterty.
2) Zwolnienie tej samej pamięci dwukrotnie odnosi się do takiego stanu: Załóżmy, że masz char * cptr;
Przydzielanie pamięci za pomocą: cptr = (char *) malloc (SIZE);
Teraz, gdy nie potrzebujesz już tej pamięci, możesz ją zwolnić, używając: free (cptr);
Teraz tutaj, co się dzieje, pamięć wskazywana przez cptr jest darmowa.
Załóżmy, że w późniejszym czasie programu ponownie zadzwonisz za darmo (cptr), to nie jest poprawny warunek. Ten scenariusz, w którym dwa razy zwalnia się tę samą pamięć, nazywany jest "dwukrotnym uwolnieniem pamięci". "
Po zwolnieniu wskaźnika pustego nie zwalnia żadnej pamięci. Jeśli dwa razy zwolnisz * niepustą * wskaźnik, pamięć zostanie zwolniona dwukrotnie, a to jest problem. – jalf