Calloc w c

Calloc w c
„Mówi się, że wykorzystanie i przypisanie pamięci lub przestrzeni w systemie jest najważniejszą rzeczą w każdym skrypcie programowym, gdy masz dużo danych w postaci zmiennych i tablic. Język C jest bardzo dynamiczny, jeśli chodzi o przydzielenie pamięci, ponieważ zawiera wiele funkcji specyficznych dla pamięci. Jedną z tych funkcji jest Calloc (). Przylegająca alokacja to inna nazwa „calloc”. Ta metoda języka C przydziela pamięć dynamiczną dla określonego typu. Ta technika służy do dynamicznego alokacji pożądanej liczby bloków pamięci określonego typu."

Takie podejście jest dość podobne do metody MALLOC języka C, ale poniżej są dwie różnice:

  1. Każdy blok w tej funkcji ma zerową inicjalizację, a określony typ jest przydzielony.
  2. W porównaniu z Malloc zawiera dwa argumenty lub parametry.

Składnia

(Cast-Type*) calloc (n, rozmiar);

Możemy rzucić zwróconą pamięć do dowolnego odpowiedniego typu pamięci, ponieważ ta funkcja zwraca wskaźnik pustki do niezbędnego adresu w pamięci. Na przykład:

ptr = (int*) calloc (20, sizeof (int));

Powyższy kod służy do przydzielenia 20 ciągłych bloków pamięci wielkości całkowitej, z których każdy zawiera 20 elementów.

Przykład 1

Zacznijmy od napisania prostego kodu. W tym przykładzie używamy Visual Studio do utworzenia pustego projektu C i dodajemy plik o nazwie ForKexample.C w katalogu/folderu plików źródłowych. Zbadaj kod w poniższej sekcji. Pierwsze dwa wiersze w poniższej próbce są używane do zawierania niezbędnych plików nagłówka. Następnie zaczyna się główna funkcja. Zwróć uwagę na użycie (float*), aby zmienić wskaźnik pustki na wskaźnik pływaka. To polecenie wewnątrz głównej funkcji przydziela ciągłą przestrzeń pamięci za pomocą funkcji CallOC dla 25 elementów, każdy z rozmiaru zmiennoprzecinka.

Ponieważ ta pamięć jest dynamiczna, zostanie przydzielona po wykonaniu pliku; Zostanie jednak wydane po zakończeniu cyklu wykonania programu. Pokazuje tylko, w jaki sposób można przeprowadzić alokacja pamięci za pomocą funkcji CallOC; Żadne konkretne wyjście nie zostanie przedstawione użytkownikowi na ekranie, ponieważ nie jest używana żadna funkcja PrintF. Oświadczenie warunkowe należy użyć do ustalenia, czy pamięć została przydzielona, ​​czy nie.

#włączać
#włączać
int main ()
float* a = (float*) calloc (25, sizeof (float));
powrót 0;

Przykład 2

Pierwsze dwa wiersze przykładowego kodu poniżej zawierają niezbędne pliki nagłówka. Główna metoda rozpoczyna się. W pierwszym wierszu funkcji głównej rzucamy typ danych punktowy na liczbę całkowitą i używamy funkcji CallOC do alokacji 25 bloków pamięci o wielkości całkowitej. W następnym wierszu zadeklarowaliśmy zmienną typu liczb całkowitych, którą później zastosujemy do wyświetlania danych wyjściowych na ekranie. W poniższym zdaniu używamy warunku IF, aby ustalić, czy punkt CallOl zwraca wartość zerową, czy nie. Tylko w tych okolicznościach, na przykład w przypadku awarii alokacji lub nie jest przydzielona przestrzeń pamięci, czy wartość zerowa zwraca.

W tej sytuacji używamy funkcji printF do wyświetlania wiadomości „pamięć niedozwolona” lub „Calloc nie udało się przydzielić pamięci.„Pokazujemy komunikat sukcesu na ekranie w inny sposób. Wejście użytkownika są gromadzone w następnym wierszu i przechowywane we wcześniejszej zadeklarowanej zmiennej.

#włączać
#włączać
int main ()
int* wskaźnik = (int*) calloc (25, sizeof (int));
int a;
if (pointer == null)
printf („pamięć nie przydzielona.\N");
w przeciwnym razie
printf („pamięć z powodzeniem przydzielona za pomocą funkcji CallOC.\N");
Scanf („%d” i a);
powrót 0;

Oto wyjście ekranu pokazujące, że metoda CallOC z powodzeniem przydziela pamięć.

Spróbujmy porażić tę procedurę, dokonując niewielkiej zmiany kodu pokazanego powyżej. Aby to zrobić, musimy zwiększyć rozmiar liczby elementów, które wymagają tego rozmiaru. Ten zmodyfikowany kod modyfikuje tylko pierwszy wiersz głównej metody, ustawia liczbę elementów i przekazuje wartość 2500000000000000000 na funkcję CallOC.

#włączać
#włączać
int main ()
int* wskaźnik = (int*) calloc (25000000000000000000000, sizeof (int));
int a;
if (pointer == null)
printf („pamięć nie przydzielona.\N");
w przeciwnym razie
printf („pamięć z powodzeniem przydzielona za pomocą funkcji CallOC.\N");
Scanf („%d” i a);
powrót 0;

Program działa pomyślnie podczas uruchamiania kodu, ale Calloc zwraca NULL, wskazując, że program nie może przydzielić żądanej ilości pamięci.

Przykład 3

W tym przykładzie prosimy o dane wejściowe użytkownika dotyczące liczby elementów potrzebnych do przechowywania bloków pamięci. Niezbędne pliki nagłówka są zawarte w pierwszych dwóch wierszach pliku. Następnie rozpoczyna się funkcja główna (). Zadeklarowaliśmy 4 zmienne typu liczb całkowitych w głównej funkcji, z których pierwsza jest zmienną typu wskaźnika, która jest głównie używana do przechowywania wyjścia funkcji Calloc. Reszta zmiennych to proste liczby całkowite. Klient jest poproszony o wprowadzenie liczby elementów, dla których alokacja pamięci jest niezbędna dla następującego wiersza.

Do przydziału rozmiaru bloku pamięci wykorzystujemy funkcję rozmiaru, aby uzyskać rozmiar typu danych liczb całkowitych. Wejście liczb całkowitych użytkownika są uzyskiwane za pomocą funkcji Scanf. Wyjście funkcji CallOC jest następnie weryfikowane w celu ustalenia, czy się powiodło, czy nie. Jeśli proces alokacji pamięci jest powodzeniem, a nie wartości null są zwracane. Jeśli wynik zostanie znaleziony, wyświetlamy komunikat sukcesu, a następnie używamy pętli, aby zachęcić użytkownika do jego znaków na wszystkich tematach.

#włączać
#włączać
int main ()
int* wskaźnik;
Int Nelements, Marks;
int sum = 0;
printf („Wprowadź liczbę wymaganych elementów (danych podmiotów):”);
Scanf („%D” i Nelements);
pointer = (int*) calloc (nelements, sizeof (int));
if (pointer == null)
printf („pamięć nie przydzielona.\N");
wyjście (0);
w przeciwnym razie
printf („pamięć z powodzeniem przydzielona za pomocą funkcji CallOC.\N");
dla (int i = 0; i < nElements; i++);
int marki = 0;

Wyświetlimy ogólny wynik użytkownika za pomocą zmiennej alokacji pamięci. Dlatego prosimy użytkownika o wprowadzenie liczby elementów lub podmiotów, dla których alokacja pamięci jest konieczna w pierwszym miejscu w tym celu. Po prawidłowym przydzieleniu pamięci wykorzystujemy zmienną wskaźnika do przechowywania znaków tematycznych. Znaki dla każdego pacjenta są wyświetlane później w pętli for for for for, a suma znaków jest wyświetlana na końcu, stosując pętlę do uruchomienia funkcji sum.

printf („Wprowadź znaki przedmiotu (%d):", i);
Scanf („%D” i Marks);
wskaźnik [i] = znaki;
printf („Znaki badań studenckich \ n”);
dla (int i = 0; i < nElements; ++i)
printf („pacjent %d - [ %d] \ n”, (i+1), Poinyer [i]);
sum = sum+wskaźnik [i];
printf („Całkowite znaki: %D”, suma);

Scanf („%d%” i nelements);
powrót 0;

Oto dane wyjściowe powyższego kodu fragmentu:

Wniosek

Ten artykuł pokazuje funkcję pamięci CallOC w C przy użyciu trzech różnych, ale prostych przykładów. Przykłady wyjaśniają, że jeśli dostępna jest niewystarczająca przestrzeń pamięci, ten alokacja pamięci zawodzi i zwraca wskaźnik zerowy, co wskazuje, że była to porażka za pomocą funkcji CallOC C.