עבור לתוכן

איך מוחקים מערך דו מימדי שהוקצה דינאמית? C++

Featured Replies

פורסם

כלומר מערך של 2 מצביעים

פורסם

תתן את קוד התוכנית שלך....

פורסם

בC++ ע"י delete:


delete [] myArr;

פורסם
  • מחבר
float **a;
a=new float*[n]
for(int i=0;t<n;i++)
a[i]=new float[m]

פורסם

קודם אתה משחרר כל אחד, ואחר כך את הגדול.

פורסם

קודם אתה משחרר כל אחד, ואחר כך את הגדול.

למה אתה מתכוון , תפרט יותר...

פורסם

for(i = 0; i < n; i++ )
{
delete[] a[i];
}

delete[] a;

פורסם

אם שחררת אחד אחד אז למה אחרי כן לשחרר את הכול הרי לא יהיה מה לשחרר..?

פורסם

אתה מגדיר מערך שכל תא בו הוא מצביע. עברו כל מצביע כזה אתה מקצע מקום בזכרון - מערך נוסף.

כלומר יש ל הקצע אחת למערך בגודל N, בנוסף עבור כל תא באותו מערך יש לך מערך נוסף בגודל M.

שחרור של המערך הראשי לא משחרר את הזכרון שבשימוש ע"י התתי - מערכים.

לכן ראשית אתה משחרר את תתי המערכים שהקצעת ולכן מכן את המערך הראשי.

או במילים אחרות, יש לך מה לשחרר, אתה מערך המצביעים עצמו - את המקום שהוא תופס.

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

פורסם

הרעיון מאוד פשוט - על כל קריאה ל-new, צריכה להיות קריאה ל-delete.

כשאתה מקצה מערך דו מימדי, אתה:

1. מקצה מערך (נניח בגודל n) של מצביעים - קריאה אחת ל-new

2. מקצה מערך עבור כל אחד מהמצביעים - עוד n קריאות ל-new

אז בשביל לשחרר את המערכים, עושים delete בסדר ההפוך:

1. משחרר כל מערך - n קריאות ל-delete

2. משחרר את מערך המצביעים - קריאה נוספת ל-delete

פורסם

עכשיו זה ברור ....אחלה הסבר..

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים