Λειτουργία malloc() στη βιβλιοθήκη C με EXAMPLE

Τι είναι το malloc στο C;

Η συνάρτηση malloc() σημαίνει εκχώρηση μνήμης. Είναι μια συνάρτηση που χρησιμοποιείται για την δυναμική κατανομή ενός μπλοκ μνήμης. Διατηρεί χώρο μνήμης καθορισμένου μεγέθους και επιστρέφει τον μηδενικό δείκτη που δείχνει στη θέση μνήμης. Ο δείκτης που επιστρέφεται είναι συνήθως τύπου void. Σημαίνει ότι μπορούμε να εκχωρήσουμε συνάρτηση malloc σε οποιονδήποτε δείκτη.

Σύνταξη

ptr = (cast_type *) malloc (byte_size);

Εδώ,

  • Το ptr είναι δείκτης cast_type.
  • Η συνάρτηση malloc επιστρέφει έναν δείκτη στην εκχωρημένη μνήμη byte_size.
Example: ptr = (int *) malloc (50)

Όταν αυτή η δήλωση εκτελεστεί με επιτυχία, δεσμεύεται ένας χώρος μνήμης 50 byte. Η διεύθυνση του πρώτου byte του δεσμευμένου χώρου εκχωρείται στον δείκτη ptr του τύπου int.

Εξετάστε ένα άλλο παράδειγμα εφαρμογής malloc:

#include <stdlib.h>
int main(){
int *ptr;
ptr = malloc(15 * sizeof(*ptr)); /* a block of 15 integers */
    if (ptr != NULL) {
      *(ptr + 5) = 480; /* assign 480 to sixth integer */
      printf("Value of the 6th integer is %d",*(ptr + 5));
    }
}

Παραγωγή:

Value of the 6th integer is 480

Τι είναι το malloc στο C

  1. Σημειώσε ότι sizeof(*ptr) χρησιμοποιήθηκε αντί για sizeof(int) προκειμένου να γίνει ο κώδικας πιο ισχυρός όταν η δήλωση *ptr μεταδίδεται αργότερα σε διαφορετικό τύπο δεδομένων.
  2. Η εκχώρηση ενδέχεται να αποτύχει εάν η μνήμη δεν είναι επαρκής. Σε αυτήν την περίπτωση, επιστρέφει έναν δείκτη NULL. Επομένως, θα πρέπει να συμπεριλάβετε κώδικα για να ελέγξετε εάν υπάρχει δείκτης NULL.
  3. Λάβετε υπόψη ότι η εκχωρημένη μνήμη είναι συνεχόμενη και μπορεί να αντιμετωπιστεί ως πίνακας. Μπορούμε να χρησιμοποιήσουμε την αριθμητική του δείκτη για πρόσβαση στα στοιχεία του πίνακα αντί να χρησιμοποιήσουμε αγκύλες [ ]. Σας συμβουλεύουμε να χρησιμοποιείτε το + για να αναφερθείτε σε στοιχεία πίνακα, επειδή η χρήση της αύξησης ++ ή += αλλάζει τη διεύθυνση που είναι αποθηκευμένη από το δείκτης.

Η συνάρτηση Malloc μπορεί επίσης να χρησιμοποιηθεί με τον τύπο δεδομένων χαρακτήρων καθώς και με πολύπλοκους τύπους δεδομένων όπως δομές.