מה קורה פה?

ogispan

New member
מה קורה פה?

לא חשוב כרגע מה התוכנית אמורה לעשות... הבעיה היא כשאני מנסה להריץ אותה - אני מקבל הודעת שגיאה (כניראה לולאה אינסופית) אבל כשאני עושה דיבגר, גם אם אני שם את נקודת העצירה בשורה האחרונה בתוכנית, לפני שה MAIN מסתיים, התוכנית רצה עד שם ונעצרת לי כאילו שהכל בסדר... במילים אחרות, כשאני עושה דיבגר, התוכנית רצה כמו שצריך. כשאני עושה הרצה, היא ניתקעת ולא עושה כלום. מישהו יכול לבדוק לי בבקשה מה קורה פה? אני מצרף את התוכנית שלי.... סיומת הקובץ היא CPP
 

ogispan

New member
הנה קובץ הטקסט

שהתוכנית צריכה ליקרא.... מכונן c בלבד
 
פיכסה ביכסה../images/Emo26.gif

יש איזה הערת סגנון אחת או שתיים (או 100
) - אבל קודם כל: יש לך את N (גלובלי
-אין שום סיבה שהוא יהיה כזה). N הוא מספר האיברים במערך:
array2=new cell_in_array[N];​
כלומר האינדקסים של המערך הם מ-0 עד N-1. בשורות הבאות למשל:
for(i=1;i<=N;i++) { ... tav=array2.field[j]; ...

אתה קורא מאינדקס N של המערך (אינדקס שלא קיים) - זיכרון שלא שלך. אגב, סתם טיפ: כשמתחילים להיות תופעות מוזרות בתוכנית (כמו אלה שתיארת) - סביר להניח שדרסת זכרון שלא שלך. המקום הראשון לחפש את המקומות האלה הוא אינדקסים של מערכים ותחום הערכים שהם מקבלים. חוץ מזה:
תקטין את ה-main - תוציא את ה-sections שסימנת בהערות לתוך פונקציות.
יש לך new ואין לך delete (אתה לא משחרר את המערכים)
תשנה את הערך המוחזר של main ל-int.
כבר הגדרת קבוע ב-define - אז תשתמש בו (יש מקומות שאתה כותב במפורש "150" - תעשה find ותמצא) ועוד ועוד ועוד...
 
והנה גם דריסת זיכרון:

array[i+1].field[j]=tav;​
כאן אתה כותב לאינדקס i+1, כש-i מתחיל לרוץ מ N-1... כלומר באיטרציה הראשונה i+1 יהיה שווה ל-N... (להזכירך, האינדקסים של המערך הם מ-0 עד ל N-1!)
 
למעלה