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

char *block;
block = malloc(5000);
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

למרות שניתן להמשיך להקצות כך זיכרון גם ב-++C, זו אינה הדרך המועדפת.
הדרך המתאימה יותר היא להשתמש באופרטור new, כמו בדוגמא זו שגם מקצה 5000 בייט של זיכרון:

char *block;
block = new char[5000];
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

והנה דוגמא להקצאת זיכרון ל-200 int-ים:

int *list;
list = new int[200];
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

ודוגמא זו משריינת מקום ל-double:

double *val;
val = new double;
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

ולבסוף, שתי דוגמאות של הקצאת מקום למבנה יחיד של car ול-20 מבנים של car:

struct car {
char make[16];
char model[16];
int year;
};

car *one;
one = new car;
car *twenty;
twenty = new car[20];
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

ברגע שהקצית מקום ע"י new, אתה תשתמש בו במשך זמן מסויים ולאחר מכן תשחרר אותו באמצעות אופרטור חדש נוסף - delete.
לדוגמא, שורות הקוד הבאות מקצות זיכרון עבור double, ולאחר מכן מוחקות את המקום הזה:

double *val = new double;
delete val;
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

שימוש ב-delete הוא פשוט, למרות זאת, כדאי לזכור דבר אחד: אם אתה מקצה מערך עליך למחוק אותו בצורה שונה:

char *block = new char[5000];
delete []block;
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט