Funkcja Malloc w C

Funkcja Malloc w C

„W języku C przydział pamięci jest bardzo znaną koncepcją i mamy wiele funkcji, aby przydzielić wspomnienia na różne zmienne, tj.mi., pamięć dynamiczna, pamięć statyczna itp. Funkcja Malloc () C jest jedną z tych funkcji, która nie tylko przydziela pamięć do konkretnego zmiennego, ale także zwraca wskaźnik adresu, w którym zapisano tę pamięć. Ten artykuł pomoże ci w użyciu Malloc w C podczas korzystania z Ubuntu 20.04 System. Udaj się na bieżąco przed wskoczeniem na wdrożenie kodu C, ponieważ pomoże ci płynnie uruchomić kody w powładzie. W ten sposób zaktualizowaliśmy go do tej pory i poprosił nas o dodanie hasła dla użytkownika, który obecnie działa. Dostaliśmy go hasłem, a proces został zakończony w ciągu kilku sekund."

Zamierzamy wdrożyć ten artykuł w języku C; Dlatego wymagamy zainstalowania jego kompilatora na naszym końcu. Linux ma użyteczność „GCC” jako kompilator, który można zainstalować z „apt”, tak jak to zrobiliśmy na pokazanym obrazie. Teraz możesz uwolnić błąd kodu w ciągu kilku sekund.

Zanim zaczniemy nasz przykład C, musi istnieć plik, w którym dodajemy kody C do kompilacji i wykonania. Dlatego tworzymy plik „Plik.C". Plik musi mieć „.C ”rozszerzenie na jego końcach, aby zidentyfikować go jako plik C.

Przykład 01

W ramach tej ilustracji kodu będziemy używać funkcji Malloc () do alokacji pamięci do zmiennej przy użyciu stałej wartości i wyświetlania, jeśli pamięć została pomyślnie przypisana, czy nie. Musimy rozpocząć ten kod C z głównymi nagłówkami biblioteki C, które muszą mieć w kodzie, a bez nich nasz kod byłby bezużyteczny do wykonania. Kod zawiera funkcję main (), która będzie wykonywać wszystko, czego potrzebujemy do alokacji pamięci i błędów wyświetlania, jeśli pamięć nie zostanie pomyślnie przydzielona. Funkcja zaczyna się od inicjalizacji stałej zmiennej liczb całkowitych „a” jako pustej.

Określiliśmy długą zmienną wskaźnika podwójnego typu „V” do przydzielenia pamięci za pomocą funkcji Malloc (). Ta funkcja Malloc () wykorzystuje stałą zmienną liczbową „A” do alokacji pamięci do wskaźnika „M.„Istnieje instrukcja„ IF-Else ”, która jest wykorzystywana do sprawdzenia, czy pamięć została przydzielona do zmiennej wskaźnika„ M ”lub nie udało się przydzielić pamięci. Tak więc część „jeśli”, która sprawdzi, czy wartość „m” jest zerowa, czy nie. Jeśli jest to „null”, funkcja printf () używana w nim w niej zademonstrowała komunikat o błędzie, i.mi., „Bez pamięci” z przerwaniem linii na końcu za pomocą „\ n."

Również instrukcja funkcji „wyjście (-1)” zakończy się. Podczas gdy część else byłaby używa 2 instrukcji funkcji printf (), i.mi., Pierwsza instrukcja wyświetlana wartość stałej zmiennej liczb całkowitych „A” i drugie instrukcja wyświetlania komunikatu sukcesu z określoną pamięcią. Zapiszmy nasz kod, zanim skompilujemy kod źródłowy do wykonania.

#włączać
#włączać
int main ()
const int a = "";
długi podwójny *m = (długi podwójny *) malloc (sizeof (długi podwójny) *a);
if (m == null)
printf („błąd: bez pamięci \ r \ n”);
wyjście (-1);
w przeciwnym razie
printf („wartość = %d \ n”, a);
printf („Świetna, pamięć: %lf \ n”, *m;

W kompilacji wykazywał pewne ostrzeżenia, ale możemy je na chwilę zignorować. Po wykonaniu skompilowanego kodu otrzymaliśmy komunikat o błędzie „Bez pamięci”, ponieważ nie zainicjowaliśmy żadnej wartości całkowitych do zmiennej „A” dla przydziału pamięci.

Aktualizujemy ten sam kod źródłowy, dodając wartość całkowitą „500” dla zmiennej „A”, abyśmy mogli przypisać dokładną pamięć do zmiennej wskaźnika „M.„Zapisz na razie zaktualizowany kod.

#włączać
#włączać
int main ()
const int a = 500;
długi podwójny *m = (długi podwójny *) malloc (sizeof (długi podwójny) *a);
if (m == null)
printf („błąd: bez pamięci \ r \ n”);
wyjście (-1);
w przeciwnym razie
printf („wartość = %d \ n”, a);
printf („Świetna, pamięć: %lf \ n”, *m;

Po skompilowaniu tego zaktualizowanego kodu nie otrzymaliśmy żadnych błędów, nawet ostrzeżenia, które zostało pokazane wcześniej. Po wykonaniu tego skompilowanego i zaktualizowanego kodu otrzymaliśmy wartość zmiennej „A” wyświetlonej wraz z pamięcią przydzieloną w punktach dziesiętnych, i.mi., Nie wyświetla dokładnej wartości pamięci.

Przykład 02

Przyjrzyjmy się innym przykładowi, aby przydzielić pamięć na określoną zmienną. W ten sposób rozpocznij ten przykład od użycia „stdio.h ”i„ stdlib.H ”nagłówki przed cokolwiek innego. Metoda Main () rozpoczęła się od deklaracji zmiennej „A” typu typu „A”. Następny wiersz używa funkcji Malloc (), aby utworzyć pamięć dla wskaźnika znaków o rozmiarze 10. Jest to początkowa alokacja pamięci dla wskaźnika „a."

Następnie funkcja strcpy () ma skopiować ciąg słów do zmiennego wskaźnika „a.„Użycie printf () jest koniecznością do wyświetlenia naszej wartości łańcuchowej zapisanej na zmiennym wskaźniku„ a ”wraz z adresem pamięci na powładzie. Znak specjalny „%s” oznacza wartość ciągu, podczas gdy „%u” oznacza wyświetlanie adresu. Następnie realokujesz nową pamięć do tej samej zmiennej wskaźnika typu znaku „A” rozmiaru 20 za pomocą funkcji realLoc () języka C. Istnieje użycie funkcji strcat () do połączenia zmiennego wskaźnika „A” z nową wartością łańcuchową „Język."

Następnie ponownie wykorzystaliśmy instrukcję printf () do wyświetlenia nowo skonokatanowanej wartości ciągu wraz z adresem zmiennego wskaźnika „a.„Następnie wypróbowaliśmy funkcję„ wolnego ”na zmiennym wskaźniku„ A ”, aby uwolnić przydzieloną pamięć. Najpierw zapiszmy ten kod, a następnie wypróbuj kompilator GCC na powładzie, aby szybko go skompilować.

#włączać
#włączać
int main ()
char *a;
A = (char *) malloc (10);
strcpy (a, „witamy c”);
printf („wartość = %s, adres: %u \ n”, a, a);
strcat (a, „język”);
printf („wartość = %s, adres: %u \ n”, a, a);
darmowe (a)

Teraz zamierzamy skompilować nasz kod z „GCC”, jak przedstawiono poniżej. Chociaż użycie funkcji „Strcpy” pokazuje ostrzeżenie, nie powstrzymuje nas przed wykonaniem kodu.

Po skompilowaniu pliku.plik C C, wykonaliśmy go w aplikacji konsoli za pomocą „./A.Out „zapytanie Linux, aby uruchomić pliki kodu. Zobaczysz wyjście dwóch linii pokazujących dwie różne wartości dla wskaźnika zmiennego „A”, ale ten sam adres, i.mi., stare i zaktualizowane wartości. Oznacza to, że przydzielona pamięć została zaktualizowana, ale adres pozostaje taki sam dla zmiennej „A."

Wniosek

Otóż ​​to! Teraz będziesz mógł utworzyć kody, aby przypisać pamięć do jakiejś specyficznej zmiennej w systemie za pomocą funkcji Malloc ().