אני מקצה מחרוזת יחסית גדולה, ואח"כ משתמש בחלק יחסית קטן ממנה, ואני שם NULL באופן ידני כדי לסמן את סוף המחרוזת. ככה שלא רק שלא חרגתי מגבולות ההקצאה, השתמשתי בפחות.
יכול להיות ש-delete מאיזשהיא סיבה מתחשב במחרוזת רק עד ה-NULL?
הרבה בעיות של delete נוצרות מזה שהקצאת מקום מסויים נגיד בגודל n לצורך משהו..ובעצם הגודל שנכנס למקום הזה היא גדול מ n ולכן נוצרה גלישה..ושאתה בא למחוק משהו של עם גלישה יש שגיאה כזאת.. אז סתם בשביל הבדיקה תכפיל את ההקצאה שלך של פולי בפי 2..אם זה מתקמפל אז לא הקצאת מספיק.. זה בד"כ קורה עם מחרוזות..נגיד המצב הבא:
char str[] = "check";//5 chars + '\0' = 6 int len = strlen(str);//length is 5 char* copyStr = new char[len]; copyStr(str,copyStr);//method that clones the string עכשיו במצב של מחיקה של copyStr אתה תכשל כי לא הקצאה תו נוסף לתו שמסיים מחרוזת
באמת המחרוזת שהכנסתי hard-coded הייתה ללא רווחים, כלומר חסר לי תו ל-NULL. ולכן גם קלט מהיוזר היה בסדר, כי אני מדלג על EOL בסוף הקלט גם אם לא היו רווחים.