פורסם 2007 בינואר 3118 שנים הכול בסדר שאני מקצה זיכרון אבל שאני מנסה לשחרר אותו זה עושה לי בעיותעשיתי את זה בתוך מחלקה בבונה של המחלקה עשיתיstr = new char[20];ובהורסdelete str;מה הבעיה?זה כתב ליWindows has triggered a breakpoint in PhoneBook.exe.This may be due to a corruption of the heap, and indicates a bug in PhoneBook.exe or any of the DLLs it has loaded.The output window may have more diagnostic information
פורסם 2007 בינואר 3118 שנים באיזה קומפיילר אתה משתמש?ניחוש פרוע - אתה מוחק את הזיכרון הזה ביותר ממקום אחד, או שזו בעיה אחרת לגמרי.delete בלי ה- [] לא אמור להפריע כאשר מדובר ב- basic type.
פורסם 2007 בינואר 3118 שנים מנסיון רב עם הקצאות בויז'ואל 2005....בד"כ כלל שהתוכנית נופלת בעת מחיקת ההקצאות זה מכיוון שבמערך שהקצת דינאמית גלשת מהזיכרון.תבדוק בכל התוכנית שאין שום גלישות....היו לי הרבה בעיות דומות .קודים שהיו תמימים למראה עם פקודות delete לא מסובכות, נפלו לי, הכל בעיות בגלישה של המערך שהוקצה.בנוסף, תבדוק אם ההקצאה עבדה לך (נדמה לי שאם היא נכשלה היא מחזירה NULL לפוינטר).
פורסם 2007 בינואר 3118 שנים לא עוזראני לא מוחק ביותר ממקום אחדאני משתמש Visual C++ 2005אז נשארה לך האפשרות השניהאו שזו בעיה אחרת לגמרי.Heap corruption זה לא סתם access violation, זה בדר"כ כשאתה עושה משהו הרבה יותר גרוע. buffer overflow למשל.יכול להיות שהמחרוזת שאתה שם שם יותר ארוכה מ- 20 תוים, או שהיא לא מסתיימת ב- null?אם תפרסם את הקוד, יהיה יותר קל להבין מה קורה שם.
פורסם 2007 בינואר 3118 שנים מחבר ההקצאה הצליחה זה לא הבעיה class String { char *str; public: String(const char *str2) { str = new char[strlen(str2)]; if(!str) throw "error occord"; strcpy(str,str2); } ~String() { delete []str; } char* GetString(){ return str; } void operator=(char* str2){ strcpy(str,str2); } void operator=(String str2){ strcpy(str,str2.GetString()); } void operator+=(char* str2) { strcat(str,str2); } char &operator[](int i) { return str[i]; } friend std::ostream &operator<<(std::ostream &out,String str); }; std::ostream &operator<<(std::ostream &out,String str) { out<<str.str; return out; }
פורסם 2007 בינואר 3118 שנים יופי, יש שם כמה בעיות:1) אתה לא מקצה מקום ל- \0.2) כשאתה משתמש בOPERATOR=, += אתה לא מקצה מקום חדש.3) האופרטורים צריכים להחזיק string & כדי שתוכל לשרשר אותם. הם אמורים לקבל גם CONSTים.4) getString צריך להחזיר גם CONST. 5) OPERATOR>> של COUT אמור לקבל רפרנס לקבוע.
פורסם 2007 בפברואר 118 שנים בנוסף, תבדוק אם ההקצאה עבדה לך (נדמה לי שאם היא נכשלה היא מחזירה NULL לפוינטר).הממ לא.. אם ההקצאה נכשלה נקרא exception... אל אם אתה משתמש בהקצאה דינאמית עם nothrow אז זה דומה ל- c ובכישלון מוחזר NULL.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.