Menu
Coddy logo textTech

Alokacja dynamiczna — malloc()

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

Teraz poznasz malloc(), podstawową funkcję służącą do żądania pamięci ze sterty podczas działania programu. Funkcja malloc() oznacza „alokację pamięci” i pozwala dynamicznie przydzielać pamięć wtedy, gdy jej potrzebujesz, zamiast deklarować zmienne o stałym rozmiarze podczas kompilacji.

Funkcja malloc() przyjmuje jeden argument: liczbę bajtów, które chcesz zaalokować. Zwraca wskaźnik void do zaalokowanego bloku pamięci lub NULL, jeśli alokacja się nie powiedzie. Ponieważ zwraca wskaźnik void, możesz przypisać go bezpośrednio do wskaźnika o określonym typie; rzutowanie jest w C opcjonalne (w przeciwieństwie do C++, gdzie jest wymagane).

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Przydziel pamięć na jedną liczbę całkowitą
// ptr wskazuje teraz na obszar pamięci, który może przechowywać liczbę całkowitą

Główną zaletą malloc() jest elastyczność — możesz zażądać dokładnie takiej ilości pamięci, jakiej potrzebujesz w czasie działania programu, a pamięć ta pozostaje dostępna, dopóki jej jawnie nie zwolnisz. Jest to szczególnie przydatne, gdy nie wiesz, ile pamięci będzie potrzebować Twój program, dopóki nie zacznie działać.

Pamiętaj, aby dołączyć <stdlib.h>, żeby używać malloc(). Rzutowanie zwróconego wskaźnika void jest w C opcjonalne, ponieważ jest on automatycznie konwertowany na typ, do którego go przypisujesz.

challenge icon

Wyzwanie

Łatwy

Napisz program w C, który demonstruje dynamiczną alokację pamięci za pomocą malloc() do utworzenia i obsługi pojedynczej liczby całkowitej na stercie. Twój program powinien:

  1. Użyć malloc() do dynamicznego zaalokowania pamięci na jedną liczbę całkowitą
  2. Rzutować zwrócony wskaźnik void na wskaźnik do liczby całkowitej
  3. Odczytać liczbę całkowitą z danych wejściowych użytkownika
  4. Zapisać wartość wejściową w dynamicznie zaalokowanej pamięci za pomocą operatora dereferencji
  5. Wypisać zapisaną wartość w formacie: Stored value: [value]
  6. Obliczyć kwadrat wartości i zapisać go w tym samym miejscu pamięci
  7. Wypisać wartość podniesioną do kwadratu w formacie: Squared value: [value]

Pamiętaj, aby dołączyć nagłówek <stdlib.h>, aby móc używać malloc(). Twój program powinien demonstrować podstawowy przebieg dynamicznej alokacji pamięci: pobieranie pamięci ze sterty, używanie jej do przechowywania i przetwarzania danych oraz korzystanie z zaalokowanej pamięci za pomocą operacji na wskaźnikach.

Na przykład, jeśli użytkownik wpisze 7, wynikiem powinno być:

Stored value: 7
Squared value: 49

To wyzwanie wprowadza Cię w podstawowe pojęcie dynamicznej alokacji pamięci, w której pamięć jest przydzielana w czasie wykonywania programu, a nie ustalana podczas kompilacji, co zapewnia programom większą elastyczność w korzystaniu z pamięci.

Spróbuj swoich sił

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

int main() {
    // Wczytaj dane wejściowe
    int input_value;
    scanf("%d", &input_value);
    
    // TODO: Napisz swój kod poniżej
    // 1. Użyj malloc(), aby przydzielić pamięć na jedną liczbę całkowitą
    // 2. Rzutuj zwrócony wskaźnik na int*
    // 3. Zapisz wartość wejściową w przydzielonej pamięci
    // 4. Wypisz zapisaną wartość
    // 5. Oblicz kwadrat i zapisz go w tym samym miejscu
    // 6. Wypisz wartość podniesioną do kwadratu
    
    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