Menu
Coddy logo textTech

שחרור זיכרון באמצעות 'delete'

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 7 מתוך 56.

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

מילת המפתח delete משחררת זיכרון שהוקצה קודם לכן באמצעות new. כשמשתמשים ב־delete, מודיעים למערכת שסיימתם להשתמש בזיכרון הזה ושאפשר להשתמש בו מחדש למטרות אחרות:

int* ptr = new int(42);  // הקצה זיכרון
// השתמש בזיכרון...
delete ptr;              // שחרר את הזיכרון

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

לאחר שקוראים ל־delete על מצביע, המצביע הזה נעשה לא תקף ואין להשתמש בו שוב. מומלץ להגדיר את המצביע ל־nullptr לאחר המחיקה כדי להימנע משימוש בו בטעות.

challenge icon

אתגר

קל

צרו תוכנית שמדגימה את מחזור החיים המלא של זיכרון דינמי: הקצאת זיכרון באמצעות new, שימוש בו, ולאחר מכן שחרורו כראוי באמצעות delete.

הקלטים הבאים יסופקו:

  • ערך של מספר שלם לאחסון בזיכרון שהוקצה באופן דינמי
  • ערך שני של מספר שלם לעדכון הערך המאוחסן

התוכנית שלכם צריכה:

  1. להשתמש ב-new כדי להקצות באופן דינמי זיכרון עבור מספר שלם, ולאחסן את המצביע במשתנה בשם dynamicPtr
  2. להש asign את ערך הקלט הראשון לזיכרון שהוקצה באופן דינמי באמצעות אופרטור ביטול ההפניה
  3. להדפיס את הערך ההתחלתי המאוחסן בזיכרון שהוקצה באופן דינמי
  4. לעדכן את הערך בזיכרון שהוקצה באופן דינמי לערך הקלט השני
  5. להדפיס את הערך המעודכן
  6. להשתמש ב-delete כדי לשחרר את הזיכרון שהוקצה באופן דינמי
  7. להגדיר את המצביע ל-nullptr לאחר המחיקה
  8. להדפיס הודעת אישור שהזיכרון שוחרר

השתמשו בפורמט הפלט המדויק הבא:

Initial value: [first value]
Updated value: [second value]
Memory freed successfully

נסו בעצמכם

#include <iostream>
using namespace std;

int main() {
    // קראו את ערכי הקלט
    int firstValue, secondValue;
    cin >> firstValue;
    cin >> secondValue;
    
    // TODO: כתבו את הקוד שלכם למטה
    // 1. הקצו זיכרון באמצעות new ושמרו את הכתובת ב-dynamicPtr
    // 2. הציבו את firstValue בזיכרון שהוקצה
    // 3. הדפיסו את הערך ההתחלתי
    // 4. עדכנו את הערך באמצעות secondValue
    // 5. הדפיסו את הערך המעודכן
    // 6. שחררו את הזיכרון והגדירו את המצביע ל-nullptr
    // 7. הדפיסו הודעת אישור
    
    return 0;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C++ אונליין