logo

كالوك في ج

يناقش هذا الموضوع كيفية إنشاء تخصيص ديناميكي للذاكرة باستخدام الدالة calloc() في لغة البرمجة C. قبل أن نستعرض المفاهيم، دعونا نناقش تخصيص الذاكرة الديناميكية في لغة C. الذاكرة الديناميكية هي إجراء برمجة هيكلي يسمح للمستخدمين بتخصيص الذاكرة في وقت تشغيل البرنامج. باستخدام تخصيص الذاكرة الديناميكية، يمكننا زيادة أو تقليل الذاكرة أثناء تنفيذ البرنامج. وبهذه الطريقة، يتم تجنب إهدار ذاكرة الكمبيوتر. ينقسم تخصيص الذاكرة إلى جزأين هما وظيفة malloc () ووظيفة 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() لتحرير الذاكرة الديناميكية التي تم إنشاؤها أيضًا calloc () أو malloc () وظيفة. لا يمكن تحرير هذه الذكريات المخصصة لوحدها، وستظل موجودة حتى نهاية البرنامج. لذلك، تقع على عاتقنا مسؤولية تحرير تلك الذاكرة التي يمكن إعادة استخدامها، وبالتالي نستخدم بشكل صريح الدالة free() لتحرير الذاكرة.

مجموعة الآلة الكاتبة

بناء الجملة

 free (ptr); 

هنا free() هي دالة تقوم بتحرير الذاكرة المخصصة باستخدام متغير المؤشر ptr.

لنفكر في إنشاء تخصيص ديناميكي للذاكرة باستخدام الدالة calloc() ثم تحرير المساحة المشغولة باستخدام الدالة free() في برنامج 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></=>