לא מצליח לדבג ב C

Orbi

New member
לא מצליח לדבג ב C

העליתי תוכנית לפני כמה ימים שאמורה רק לבדוק יישום של REALLOC, אמורה לקבל תווים למערך, כל פעם להגדיל אותו עד שמסתיים ואז להדפיס. התוכנית מסתיימת עם כמה שגיאות, ולא הצלחתי להבין למה,אשמח אם מישהו יכול להכווין אותי, אולי (ואני מבין שזאת השקעה) אפילו להריץ ולראות בעצמו. התוכנית מצורפת, תודה מראש. *כמובן לשנות ל c.
 

vinney

Well-known member
אתה לא מחשב גדלים נכון

sizeof(arr) מחזיר לך ערך קבוע (גודל של מצביע)
 

ahab

New member
תשמור משתנה בצד

אם השתמשת ב-malloc להקצות זכרון, אין לך אפשרות להשתמש ב-sizeof על מנת לקבל את גודל הבלוק שהוקצה. תשמור אותו במשתנה (למשל, ב-size...) דבר קטן נוסף, נראה לי שב-malloc התכוונת להשתמש ב-sizeof(char), לא?
 

Orbi

New member
שיניתי קצת אבל לא כל כך הבנתי

אני יודע שבהתחלה הוקצה מערך בגודל 1( באמת שיניתי את malloc ל sizeof(char), שמרתי את זה במשתנה בשם size כל פעם אני מגדיל אותו, אבל זה זורק אותי עכשיו יותר ממקודם... התוכנית המתוקנת רצ"ב...
 

vinney

Well-known member
מה זורק? מי זורק?

תקצה טיפה יותר מקום. ובכלל, להשתמש בREALLOC כמו שאתה משתמש זה התאבדות.
 

Orbi

New member
לא הצלחתי להבין מה זורק...

למה זאת התאבדות? כי קל יותר להשתמש ברשימה מקושרת?... נכון... אבל זה התרגיל בממ"ן...
 

vinney

Well-known member
מה זאת אומרת לא הצלחת להבין?

מה הודעת השגיאה? המלל? באיזה שלב זה קורה? על איזה קלט? בנוסף, אתה מריץ בDEBUG או בRELEASE? כי אם בDEBUG - יכול להיות שיש לך בעיה עם הקצאות זכרון. אתה צריך להוסיף עוד כמה בתים בהקצאה מעבר למה שאתה צריך בפועל. בRELEASE זה לא יקרה.
 

Orbi

New member
עוד קצת פרטים

עכשיו הצלחתי להבין כי גם כשהוא הדפיס לי את המחרוזת זה לא היה מושלם, הוא נתן לי סימן מוזר, רק עכשיו הבנתי שזה היה קשור לרווחים (שלא טיפלתי במקרה של רווח) בכל מיקרה עכשיו כשאני מסיים את התוכנית (עם EOF) הוא רושם את המחרוזת אבל מופיעה הודעת שגיאה: Debug error Program: ....program files\...... DAMAGE:after normal block (#59 )at 0x004300A0 (press retry to debug the application) לא ברור לי... אולי יש למישהו שנייה להריץ את זה ולראות אולי ההודעת שגיאה בעייתית אצלי, או לחילופין להעלות רעיון למה זה קשור (הרצתי את זה רגיל לא בDEBUG).
 

vinney

Well-known member
הרצת בDEBUG

בRELEASE אתה לא מקבל כזאת הודעת שגיאה, אלא הודעה רגילה של EXCEPTION. הבעיה בקוד הזה:
arr = (char *)realloc( arr,(size + 1) ); size += 1; arr[size] = '\0';​
תנסה רגע לחשוב מה קורה שם שגורם לך לקבל MEMORY EXCEPTION.
 

Orbi

New member
הבעייה בקוד...

לפני היציאה מהלולאה הגדלתי כבר את המערך ולכן מה שנשאר זה רק להציב... אכן זה מה שעשיתי וזה עובד עכשיו... תודה רבה!
 
למעלה