נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: האם הקוד ב-c++ להקצאת ושחרור זכרון בסדר ?

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
אורח כמובן
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 18 August 2007 בשעה 18:20 | IP רשוּם
ציטוט אורח כמובן

קוד:
queue<int>* q[order];
for(int i = 0 ; i < order ; ++i)
    q[i] = new queue<int>();
...
...
delete[] q;


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

- האם יש דרך אחרת לאתחל מערך יחד עם כל האיברים

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

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 18 August 2007 בשעה 19:49 | IP רשוּם
ציטוט shoshan

1. לא יודע, לא נראה לי שיש דרך

2. כל איבר...


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
אלצ'קו
אחראי פורומים
אחראי פורומים
סמל אישי
ג2ר פ33תי

הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת
הודעות: 609
נשלח בתאריך: 18 August 2007 בשעה 20:35 | IP רשוּם
ציטוט אלצ'קו

  • הפיתרון הנכון הוא כמובן שימוש במחלקה כגון vector לייצוג מערך.
  • הכלל אומר ש-delete[] iff new[]‎ ו-delete iff new. כל שימוש אחר הוא שגיאה.
חזרה לתחילת העמוד הצג את כרטיס החבר של אלצ'קו חפש הודעות אחרות של אלצ'קו
 
מה קורה לך
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 23 August 2007 בשעה 23:20 | IP רשוּם
ציטוט מה קורה לך

לא פלא שהקומפיילר בעט אותך לכל הרוחות.

אתה מנסה לשחרר משהו שהוקצא ב-STACK של התוכנית. זה לא אפשרי.
ניתן לשחרר רק משתנים שהוקצו דינאמית ע"י האופרטור NEW.
בתוכנית שלך אתה הצהרת באופן סטאטי על משתנה מסוג מערך של פויינטרים לתורים בגודל order.
משתנה זה נמצא ב-STACK של התוכנית ולא ב-HEAP אי אפשר לשחרר אותו כי הוא לא
הוקצה באופן דינאמי. מאידך ניתן לשחרר את התורים שהקצאת בלולאה ע"י האופרטור DELETE ללא סוגריים מרובעים.

לדוגמה:

קוד:
int a[10];
delete []a;// error
int* a = new int[10];
delete []a;// ok.

בקיצור אם אתה רוצה לשחרר את התורים שהקצאת אתה צריך לחזור על הלולאה:

קוד:
for (int i = 0; i < order; i++)
  delete q[i];

זהו...

חזרה לתחילת העמוד הצג את כרטיס החבר של מה קורה לך חפש הודעות אחרות של מה קורה לך בקר בדף הבית של מה קורה לך
 
אורח
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 24 August 2007 בשעה 00:05 | IP רשוּם
ציטוט אורח

זהו, שזה כן התקמפל ואפילו רץ, רק שלא הייתי בטוח ששחררתי את כל הזכרון, ואכן בסוף עברתי לקוד כמו ששלחת.
חזרה לתחילת העמוד הצג את כרטיס החבר של אורח חפש הודעות אחרות של אורח בקר בדף הבית של אורח
 
מה קורה לך
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 24 August 2007 בשעה 00:39 | IP רשוּם
ציטוט מה קורה לך

אוקיי טעות שלי...

קבל תיקון לא הקומפיילר ולא בזמן הידור אלא בזמן ריצה ע"י מ"ה.

חחח העיקר שזה עובד בסוף.

חזרה לתחילת העמוד הצג את כרטיס החבר של מה קורה לך חפש הודעות אחרות של מה קורה לך בקר בדף הבית של מה קורה לך
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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