debug error

yhaim

New member
debug error

יש לי בעיה בקוד הבא: student::insLname(char *n) { int len; len=strlen(n); if(l_name!=NULL) delete l_name; l_name=new char (len+1); strcpy(l_name,n); } כאשר הוא מגיע לשורה של ה - delete הוא זורק הודעת שגיאה. אבל אם אני לוחץ על כפתור התעלם הוא ממשיך לבצע את הקוד כרגיל. כנראה בעיה במחיקת האובייקט או בשורה אחריו. אשמח לרעיונות.
 

eyalbd

New member
ה - new אצלך לא תקין

וגם ה delete הנה הקוד המתוקן:
student::insLname(char *n) { int len; len=strlen(n); if(l_name!=NULL) delete [] l_name; l_name=new char[len+1]; strcpy(l_name,n); }​
כמה הערות: א. אין צורך לבדוק NULL לפני delete ב. שים לב שה-new הוא עבור מערך לכן גם ה delete. ג. אתה תצטרך לתקן גם את ה destructor שיבצע אותה פעולת delete. שוב אין צורך לבדוק NULL ד. כדאי שתעביר *const char ולא סתם *char ה. יש סיכון נמוך ש-new ייכשל ואז האובייקט שלך יהיה במצב לא קונסיסטנטי כי כבר עשית delete על השם הנה קוד מתוקן שלוקח בחשבון את ההערות האלה:
student::insLname(const char *n) { int len = strlen(n); char* new_name = new char[len + 1]; strcpy(new_name, n); // allocation and copy succeeded ==> we can delete // delete [] l_name; l_name = new_name; }​
 

yhaim

New member
בהמשך להערותיך

הקוד המתוקן ללא הערות גם לא עובד. הקוד שנתת לאחר ההערות עובד. אני לא מבין הרי אני בודק אם האובייקט מכיל תוכן, אם כן אני מוחק אותו. ומייד אחרי מקצה לו תוכן חדש. אם האוביקט ריק הרי שאין צורך למחוק אותו וישר מכניסים ערך חדש. אני באמת לא מבין למה הקוד הזה לא עובד: student::insLname(char *n) { int len; len=strlen(n); if(l_name!=NULL) delete [] l_name; l_name=new char (len+1); strcpy(l_name,n); }
 
למעלה