logo

קאלוק ב-C

נושא זה ידון כיצד ליצור הקצאת זיכרון דינמית באמצעות הפונקציה calloc() בשפת התכנות C. לפני שנעבור על המושגים, בואו נדון בהקצאת הזיכרון הדינמי ב-C. זיכרון דינמי הוא הליך תכנות מבנה המאפשר למשתמשים להקצות את הזיכרון בזמן הריצה של תוכנית. באמצעות הקצאת זיכרון דינמית, אנו יכולים להגדיל או להקטין את הזיכרון במהלך ביצוע תוכנית. בדרך זו, הוא מונע בזבוז של זיכרון המחשב. הקצאת זיכרון מחולקת לשני חלקים הם malloc() ופונקציית calloc().

קאלוק ב-C

א הפונקציה calloc() היא פונקציית ספרייה מוגדרת מראש המייצגת הקצאת זיכרון רציפה . פונקציה calloc() משמשת ליצירת בלוקים מרובים בזמן הריצה של תוכנית בעלת אותו גודל בזיכרון. פונקציית calloc מוגדרת בתוך stdlib.h קובץ הכותרת. יש לו שני פרמטרים, לא. של בלוקים וגודל כל בלוק. כאשר הזיכרון הדינמי מוקצה באמצעות הפונקציה calloc() הוא מחזיר את כתובת הבסיס של הבלוק הראשון, וכל בלוק מאותחל עם 0. ואם לא נוצר זיכרון, הוא מחזיר מצביע NULL.

לדוגמה, נניח שאנו רוצים ליצור שלושה בלוקים של זיכרון באמצעות הפונקציה calloc() , עלינו להעביר שני פרמטרים, מספר בלוקים (3) וגודל כל בלוק (int, char, float וכו') ב- הבת. באופן זה, הוא יוצר שלושה בלוקים שגודלם זהה בתוך זיכרון המחשב.

תחביר

 ptr = (cast_type *) calloc ( number_of_blocks, size_of_block); 

בתחביר לעיל, לפונקציה calloc() יש שני פרמטרים. הפרמטר הראשון מגדיר את מספר בלוקים והפרמטר השני מגדיר את גודל של כל בלוק לזכר. גודל הבלוקים ו-cast_type יכולים להיות ב-int, char, float וכו'.

לַחֲזוֹר : הוא מחזיר את כתובת הבסיס של הבלוק הראשון למשתנה ptr.

תוכנית לבדיקת זיכרון דינמי מוקצת באמצעות פונקציית calloc()

בוא נכתוב תוכנית פשוטה כדי לבדוק אם הזיכרון הדינמי מוקצה ב-C.

תוכנית.ג

 #include #include int main() { int *ptr; /* use calloc() function to define the no. of blocks and size of each blocks. */ ptr = calloc (4, sizeof(int)); // here 4 is the no. of block and int is the size of block if (ptr != NULL) { printf (' Memory is created successfully 
'); } else printf (' Memory is not created '); return 0; } 

תְפוּקָה:

 Memory is created successfully 

תוכנית להדגמת השימוש בפונקציה calloc()

בואו נשקול יצירת הקצאת זיכרון דינמית באמצעות פונקציית calloc() ואחסון נתונים בלוקי הזיכרון.

תוכנית2.ג

 #include #include #include void main() { int n, *ptr, *p, i, sum = 0; /* n = number of elements, *ptr = store base address of the dynamic memory, *p store temporary address of the *ptr */ printf (' Enter the number of elements: '); scanf (' %d', &n); // it takes number of elements // use calloc syntax to create memory block of int data type ptr = (int *) calloc (n, sizeof(int)); p = ptr; // assign the address of ptr if (ptr == NULL) // it checks whether the memory is allocated { printf (' Memory is not allocated. '); exit(0); // exit from the program } printf (' Enter %d numbers 
&apos;, n); for ( i = 1; i <= n; i++) { scanf ( '%d', ptr); sum="sum" + *ptr; ptr++; } printf (' elements are: '); for (i="1;" i <="n;" %d', *p); p++; 
 the addition of is: %d ', sum); getch(); pre> <p> <strong>Output:</strong> </p> <pre> Enter the number of elements: 5 Enter 5 numbers 1 2 3 4 5 Elements are: 1 2 3 4 5 The addition of the elements is: 15 </pre> <h3>Program to release dynamic memory allocation using free() function</h3> <p> <strong>free() function:</strong> A free() function is used to release the dynamic memory which is created either <strong>calloc</strong> () or <strong>malloc</strong> () function. These allocated memories cannot be freed to their own, and they will exist till the end of the program. So, it is our responsibility to release that memory that can be reused, and hence we explicitly use the free() function to release the memory.</p> <p> <strong>Syntax</strong> </p> <pre> free (ptr); </pre> <p>Here free() is a function that releases the allocated memory using the pointer ptr variable.</p> <p>Let&apos;s consider creating dynamic memory allocation using the calloc() function and then releasing occupied space using the free() function in the C program.</p> <p> <strong>Release.c</strong> </p> <pre> #include #include #include void main() { int n, *ptr, *p, i, sum = 0; printf (&apos; Define the number of elements to be entered: &apos;); scanf (&apos; %d&apos;, &amp;n); // use calloc syntax to create memory block of int data type ptr = (int *) calloc (n, sizeof(int)); p = ptr; // store the base address in p if (ptr == NULL) { printf (&apos; Out of memory &apos;); exit(0); } printf (&apos; Enter the elements 
&apos;, n); for ( i = 1; i <= n; i++) { scanf ( '%d', ptr); sum="sum" + *ptr; ptr++; } printf (' elements are: '); for (i="1;" i <="n;" %d', *p); p++; 
 the addition of is: %d ', sum); free(ptr); * use free() function to release dynamic memory allocation getch(); pre> <p> <strong>Output:</strong> </p> <pre> Define the number of elements to be entered: 6 Enter the elements 2 4 6 8 10 12 Elements are: 2 4 6 8 10 12 The addition of the elements is: 42 </pre> <hr></=></pre></=>

תוכנית לשחרור הקצאת זיכרון דינמית באמצעות פונקציית free()

free() פונקציה: פונקציה free() משמשת לשחרור הזיכרון הדינמי שנוצר גם כן calloc () או malloc () פונקציה. לא ניתן לשחרר את הזיכרונות שהוקצו אלה לעצמם, והם יהיו קיימים עד סוף התוכנית. לכן, באחריותנו לשחרר את הזיכרון שניתן לעשות בו שימוש חוזר, ומכאן שאנו משתמשים במפורש בפונקציה free() כדי לשחרר את הזיכרון.

תחביר

 free (ptr); 

כאן free() היא פונקציה שמשחררת את הזיכרון המוקצה באמצעות המשתנה pointer ptr.

בואו נשקול ליצור הקצאת זיכרון דינמית באמצעות הפונקציה calloc() ולאחר מכן לשחרר שטח תפוס באמצעות הפונקציה free() בתוכנית C.

Release.c

 #include #include #include void main() { int n, *ptr, *p, i, sum = 0; printf (&apos; Define the number of elements to be entered: &apos;); scanf (&apos; %d&apos;, &amp;n); // use calloc syntax to create memory block of int data type ptr = (int *) calloc (n, sizeof(int)); p = ptr; // store the base address in p if (ptr == NULL) { printf (&apos; Out of memory &apos;); exit(0); } printf (&apos; Enter the elements 
&apos;, n); for ( i = 1; i <= n; i++) { scanf ( \'%d\', ptr); sum="sum" + *ptr; ptr++; } printf (\' elements are: \'); for (i="1;" i <="n;" %d\', *p); p++; 
 the addition of is: %d \', sum); free(ptr); * use free() function to release dynamic memory allocation getch(); pre> <p> <strong>Output:</strong> </p> <pre> Define the number of elements to be entered: 6 Enter the elements 2 4 6 8 10 12 Elements are: 2 4 6 8 10 12 The addition of the elements is: 42 </pre> <hr></=>