פורסם 2010 באוגוסט 2715 שנים שלום.אם יש לי מערך מצביעים בגודל 5 עם נתונים(כל אחד הוא אובייקט)ועכשיו לדוגמא אני רוצה להגדיל אותו ל7כיצד אני יכול להעתיק את הנתונים ממערך המצביעים הישן?והרי כשאעשה לו delete תא תא ואח"כ אמחק אותו בעצמו, אז המצביע שהעתקתי אליו יצביע לזבל.האם ניתן לא למחוק תא תא, אלא למחוק את המצביע עצמו ואז אין לי בעצם איבוד זיכרון כי המצביע החדש מצביע לכתובות הישנות.לדוגמאאם יש לי מערךClass **AClass **temp temp = new Class*[Arraysize + addsize]; for(int i = 0; i < Arraysize ; i ++) { temp[ i ]=A[ i ]; }לאחר מכן אכניס נתונים חדשים כלומר אקצה זיכרון חדש למקומות החדשיםואזאם אני אעשה כך: for(int i= 0; i< Arraysize ; i++){ delete A[i]; } delete[] A;אז tempמצביע לזבלוהתוכנית קורסתאך אם אני עושה רק כך(לאחר שכבר העתקתי לtemp)delete []Aזה עובד פרפקטאני רק חושש שאיפשהו בדרך איבדתי זכרון למרות שעל פני נראה שלאכי אחרי הכל temp מצביע לאותם מקומותאשמח לעזרתכם
פורסם 2010 באוגוסט 2715 שנים איזו סיבה יש לך למחוק את המצביעים עצמם? תיצור מערך חדש, תעתיק לתוכו את המצביעים (באמצעות השמה, בלי שום new/delete) ואז תמחק את הישן.
פורסם 2010 באוגוסט 2715 שנים מחבר אז לפי דבריך הקוד שכתבתי נכון בהחלט?שיניתי במקום int למערך של אובייקטים.
פורסם 2010 באוגוסט 2715 שנים מה שכתבת בהתחלה נכון, רק מומלץ לאפס את המקומות ב-temp שלא מצביעים על כלום.
פורסם 2010 באוגוסט 2715 שנים אם אתה כבר עובד ב ++C, תשקול להשתמש בקונטיינר סטנדרטי (דוגמאת vector) ולא במערכים מגעילים כאלה.זה הבדל של עולם ומלואו
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.