Menu
Coddy logo textTech

Zwalnianie pamięci za pomocą free()

Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 35 z 63.

Gdy dynamicznie przydzielasz pamięć za pomocą malloc(), pozostaje ona przydzielona, dopóki jej jawnie nie zwolnisz. Funkcja free() służy do zwracania systemowi dynamicznie przydzielonej pamięci, gdy skończysz z niej korzystać.

Funkcja free() przyjmuje jeden argument: wskaźnik do bloku pamięci, który chcesz zwolnić. Musi to być ten sam wskaźnik, który został zwrócony przez malloc() (lub powiązane funkcje, takie jak calloc()).

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Przydziel pamięć
*ptr = 42;  // Użyj pamięci
free(ptr);  // Zwolnij pamięć po zakończeniu

Niezwolnienie pamięci przez wywołanie free() powoduje tak zwany wyciek pamięci. Przydzielona pamięć pozostaje zarezerwowana przez program, mimo że już jej nie używasz. W długo działających programach lub programach wielokrotnie przydzielających pamięć takie wycieki mogą pochłonąć całą dostępną pamięć systemową i powodować problemy z wydajnością lub awarie.

Pamiętaj: każdemu malloc() powinno odpowiadać free(). Ta para jest niezbędna do odpowiedzialnego zarządzania pamięcią w programowaniu w C.

challenge icon

Wyzwanie

Łatwy

Napisz program w C, który demonstruje pełny cykl przydzielania i zwalniania pamięci dynamicznej. Twój program powinien:

  1. Odczytać od użytkownika liczbę całkowitą count, określającą, ile liczb całkowitych ma zostać zapisanych
  2. Użyć malloc() wraz z sizeof(), aby dynamicznie przydzielić pamięć na tablicę count liczb całkowitych
  3. Sprawdzić, czy przydzielenie pamięci się powiodło — jeśli nie, wyświetlić Memory allocation failed! i zakończyć program
  4. Jeśli przydzielenie pamięci się powiedzie, wyświetlić Memory allocated successfully!
  5. Odczytać od użytkownika count liczb całkowitych i zapisać je w przydzielonej tablicy
  6. Obliczyć i wyświetlić sumę wszystkich wartości w formacie: Sum: [value]
  7. Znaleźć i wyświetlić największą wartość w formacie: Maximum: [value]
  8. Użyć free(), aby zwolnić pamięć
  9. Wyświetlić Memory freed successfully!, aby potwierdzić zwolnienie pamięci

Pamiętaj, aby dołączyć nagłówek <stdlib.h>, żeby móc używać malloc() i free(). To wyzwanie pokazuje, jak ważne jest używanie malloc() i free() w parze, aby zapobiegać wyciekom pamięci w programach.

Na przykład, jeśli dane wejściowe to:

4
15 8 23 12

Oczekiwane dane wyjściowe to:

Memory allocated successfully!
Sum: 58
Maximum: 23
Memory freed successfully!

To wyzwanie utrwala kluczową zasadę: każdy dynamicznie przydzielony blok pamięci należy prawidłowo zwolnić, gdy nie jest już potrzebny. W ten sposób w programowaniu w C zamyka się pełny cykl odpowiedzialnego zarządzania pamięcią.

Spróbuj swoich sił

#include <stdio.h>
#include <stdlib.h>

int main() {
    int count;
    
    // Wczytaj liczbę liczb całkowitych do przechowania
    scanf("%d", &count);
    
    // TODO: Napisz swój kod poniżej
    // 1. Przydziel pamięć za pomocą malloc() i sizeof()
    // 2. Sprawdź, czy przydział pamięci się powiódł
    // 3. Wczytaj wartości całkowite i je zapisz
    // 4. Oblicz sumę i znajdź wartość maksymalną
    // 5. Zwolnij przydzieloną pamięć
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C online