מבוא לתכנות ולמדעי המחשב בשפת C/ניהול זיכרון, מצביעים ומבנים: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
שורה 4:
השיעור נמצא [http://orimosenzon.com/intro2cs_2012/memory_and_pointers.pdf במסמך pdf זה]
 
== דוגמה: מערך של מערכים ==
 
בדוגמה המופיעה במסמך חסר קוד לשיחרור זיכרון. הנה הקוד המלא:
השיעור שבמסמך מכיל תוכן הקשור למבנים, struct-ים ב c.
 
<syntaxhighlight>
הנה הסבר מפורט יותר על מבנים ואיך משתמשים בהם.
#include <stdio.h>
#include <stdlib.h>
 
const int LENGTH = 5;
 
int** makeArray() {
int **arr2d = (int**)malloc(sizeof(int*)*LENGTH),i,j;
for(i=0; i<LENGTH; i++) {
arr2d[i] = (int*)malloc(sizeof(int)*(i+1));
for(j=0; j<=i; j++)
arr2d[i][j] = i*j; /* same as: *(*(arr2d+i)+j) = i*j */
}
return arr2d;
}
 
int main() {
int **ar = makeArray(),i,j;
for(i=0; i<LENGTH; i++) {
for(j=0; j<=i; j++)
printf("%d ",*(*(ar+i)+j)); /* same as: printf("%d ",ar[i][j]); */
printf("\n");
}
 
for(i=0; i<LENGTH; ++i)
free(ar[i]);
 
free(ar);
return 0;
}
 
</syntaxhighlight>
שימו לב לסדר שיחרור הזיכרון: ראשית המערכים הפנימיים ורק בסוף המערך הראשי שמצביע עליהם. אם היינו משחררים בהתחלה את המערך הראשי, לא היתה לנו אפשרות להתייחס למערכים הפנימיים והם היו נשארים כמובלעות בזיכרון בלי יכולת לשחרר אותם. זכרון שהוקצא בלי יכולת להתייחס אליו נקרא zombie (מת-חי). ותוכנית שמייצרת זומבים נקראת תוכנית עם דליפות זיכרון.
 
== struct - מבנה ==
ב - C ניתן להגדיר טיפוס המורכב ממספר טיפוסים אחרים. טיפוס כזה נקרא struct או מבנה. לדוגמה: