פורסם 2007 במאי 2518 שנים void removetempcard(int i,int j){ posIter=posl.begin(); tempIter=templcard.begin(); while(tempIter!=templcard.end()) { if((posIter->x==i)&&(posIter->y==j)) { posl.erase(posIter); templcard.erase(tempIter); } posIter++; tempIter++; }}זה הקוד הבעייתי.קצת הסברים ורקע : templcard זה רשימה שאמורה לשמור קלפים מסויימיםposl זה רשימה שאמורה לשמור את המיקומים של אותם קלפיםהם עובדים בתאום, נגיד האיבר הראשון ב templcard המיקום שלו יהיה באיבר הראשון ב poslולכן אורכם שווה.בפונ' הזאת אני מקבל 2 אינדקסים i ו j אם האינדקסים האלה קיימים ברשימה poslאני רוצה להסיר את הקלף הזה וגם את המיקום שלו.יש לי שגיאת זכרון בעת הרצה :Unhandled exception at 0x00421add in rum.exe: 0xC0000005: Access violation reading location 0xfeeefef6.לפי בדיקה שלי השגיאה נוצרת לאחר המעבר השני על ה whileהמעבר הראשון עובר בסדר גומר והקלף שצריך להוריד אותו אכן יורדמישהו לעזור לי לפתור את הבעיה?
פורסם 2007 במאי 2518 שנים ברגע שאתה מוחק את האיבר האיטרטור שמצביע אליו הוא חסר משמעות. אתה צריך קודם לשמור את האיטרטור למשתנה זמני, לקדם אותו ואז למחוק בעזרת המשתנה הזמני.אפשר לפתור את זה גם בעזרת שימוש בפונקציית remove_if ואז אתה לא צריך לעשות את המחיקה בעצמך.- למה לא לעשות רשימה של pair? נראה לי הרבה יותר מתאים למקרה הזה
פורסם 2007 במאי 2518 שנים מחבר ברגע שאתה מוחק את האיבר האיטרטור שמצביע אליו הוא חסר משמעות. אתה צריך קודם לשמור את האיטרטור למשתנה זמני, לקדם אותו ואז למחוק בעזרת המשתנה הזמני.אפשר לפתור את זה גם בעזרת שימוש בפונקציית remove_if ואז אתה לא צריך לעשות את המחיקה בעצמך.- למה לא לעשות רשימה של pair? נראה לי הרבה יותר מתאים למקרה הזהניסיתי לעשות את מה שאמרת הפונ' המתוקנת :void removetempcard(int i,int j){ list<pos>::iterator posIter2; list<card>::iterator tempIter2; posIter=posl.begin(); tempIter=templcard.begin(); while(tempIter!=templcard.end()) { if((posIter->x==i)&&(posIter->y==j)) { posIter2=posIter; tempIter2=tempIter; posl.erase(posIter2); templcard.erase(tempIter2); } posIter++; tempIter++; }}הארור שאני מקבל בזמן שהיא צריכה לרוץ:rum.exe has encountered a problem and needs to close. We are sorry for the inconvenience.מבדיקה שלי שוב פעם הארור נוצר בכניסה השניה ל while באותה שורה (התנאי)
פורסם 2007 במאי 2518 שנים מחבר אמרתי קודם לקדם ואז למחוק. אתה קודם מחקת ואז קידמת, בעצם לא שינית כלום.תודה רבה זה אכן עובדעכשיו אני יצטרך לתקן קצת דברים אחרים
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.