עבור לתוכן

העתקה של מערך מצביעים C++

Featured Replies

פורסם

שלום.

אם יש לי מערך מצביעים בגודל 5 עם נתונים(כל אחד הוא אובייקט)ועכשיו לדוגמא אני רוצה להגדיל אותו ל7

כיצד אני יכול להעתיק את הנתונים ממערך המצביעים הישן?

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

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

לדוגמא

אם יש לי מערך

Class **A
Class **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 מצביע לאותם מקומות

אשמח לעזרתכם

פורסם

איזו סיבה יש לך למחוק את המצביעים עצמם? תיצור מערך חדש, תעתיק לתוכו את המצביעים (באמצעות השמה, בלי שום new/delete) ואז תמחק את הישן.

פורסם
  • מחבר

אז לפי דבריך הקוד שכתבתי נכון בהחלט?

שיניתי במקום int למערך של אובייקטים.

פורסם

מה שכתבת בהתחלה נכון, רק מומלץ לאפס את המקומות ב-temp שלא מצביעים על כלום.

פורסם
  • מחבר

תודה רבה.

שבת שלום.

פורסם

אם אתה כבר עובד ב ++C, תשקול להשתמש בקונטיינר סטנדרטי (דוגמאת vector) ולא במערכים מגעילים כאלה.

זה הבדל של עולם ומלואו

ארכיון

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

דיונים חדשים