Κατανομή μνήμης στο γ
Ο μεταγλωττιστής γ έχει μια βιβλιοθήκη κατανομής μνήμης, καθορισμένος στη μνήμη malloc.h. είναι διατηρημένος χρησιμοποιώντας τη λειτουργία malloc, και επιστρέφει έναν δείκτη στη διεύθυνση. Παίρνει μια παράμετρο, το μέγεθος της μνήμης που απαιτείται στις ψηφιολέξεις.
Το ακόλουθο παράδειγμα διαθέτει το διάστημα για τη σειρά, "hello world".
ptr = (char *)malloc(strlen("Hello world") + 1);
Ο πρόσθετος ψηφιολέξη πρέπει για να λάβει υπόψη το χαρακτήρα λήξης σειράς, "\0". (Προσροφητικός άνθρακας *) καλείται απόρριμμα, και αναγκάζει τον επιστροφής τύπο για να είναι προσροφητικός άνθρακας *.
Δεδομένου ότι οι τύποι στοιχείων έχουν τα διαφορετικά μεγέθη, και malloc επιστρέφει το διάστημα στις ψηφιολέξεις, είναι ορθή το πρακτική για λόγους φορητότητας να χρησιμοποιηθεί ο χειριστής sizeof κατά διευκρίνιση ενός μεγέθους που διαθέτει.
Το ακόλουθο παράδειγμα διαβάζει μια σειρά στον απομονωτή σειράς χαρακτήρα και διαθέτει έπειτα το ακριβές ποσό μνήμης που απαιτείται και την αντιγράφει σε έναν μεταβλητό αποκαλούμενο "ptr".
#include <string.h>
#include <malloc.h>
int main()
{
char *ptr, buffer[80];
printf("Enter a string: ");
gets(buffer);
ptr = (char *)malloc((strlen(buffer) + 1) *
sizeof(char));
strcpy(ptr, buffer);
printf("You entered: %s\n", ptr);
return 0;
}
Η παραγωγή του προγράμματος θα είναι η ακόλουθη:
Enter a string: India is the best
You entered: India is the best |
|