![ישן](https://static.fresh.co.il/images/vBulletin/statusicon/post_old.gif)
28-02-2006, 22:19
|
![צלמית המשתמש של scripter](image.php?u=7024&dateline=1183139825) |
|
|
חבר מתאריך: 04.08.02
הודעות: 4,468
|
|
...
אהלן.
הממ, קשה מאוד להסתכל על הקוד ככה, תנסה ליישר אותו פעם הבא.
בכל מקרה, ממבט ראשון כמה דברים:- אין צורך להשתמש ב-alloc.h - מספיק להוסיף stdlib.h
- אל תקלוט מחרוזת בעזרת gets - תקלוט בעזרת fgets למשל
- תגדיר טיפוס pbook (בעזרת typedef) או שתכתוב לפני כל התייחסות למבנה הנ"ל, את המילה struct
- main חייבת להחזיר int.
- בדוק את הערך המוחזר מ-realloc תמיד.
עכשיו לתוכנית עצמה:
char a;
switch (a)
מה, מה, מה? בכלל לא קלטת שום דבר למשתנה a.
אז... על מה בעצם אתה מבצע switch?
]left]
pr=(pbook *)realloc(pr,sizeof(pbook)*num+1);
[/left]
הממ, בוא נראה, אתה מפעיל את התוכנית... אוקיי, הגדרת num=0, מצויין.
אתה כופל ב-num... ומוסיף אחד.
בסוף אתה מקצא כמה? 1... נראה לך הגיוני? ![Smile](images/smilies/smile.gif)
עכשיו... לבעיה העיקרית:
מה זה כל הבלבול הזה עם realloc?
אני לא אתחיל לעבור עכשיו על כל הקוד, כי אני קצר בזמן.
המלצה שלי - לצורך העניין (אני מניח שזאת תוכנית די פשוטה - או תרגול רק), הייתי הולך על רשימה ע"מ לשמור את הנתונים.
כל ההקצאות החוזרות האלו זה סיוט - ולעבור עליהן עכשיו ב11 בלילה, עוד יותר ![Smile](images/smilies/smile.gif)
אם לא הסתדרת עד מחר, אני אשב על התוכנית קצת - נראה מה אפשר לסדר.
לא רוצה לחכות עד מחר? ![Smile](images/smilies/smile.gif)
מצויין, דבר ראשון שהייתי עושה זה לבדוק את הערך המוחזר מכל ההקצאות.
התוכנית שלך מניחה מראש שכל ההקצאות עברו בהצלחה... אבל זה לא הולך ככה.
אז, תבדוק את הערכים המוחזרים - תשתמש ב-perror ע"מ לדעת מה הבעיה וככה לאט לאט תצליח להעלות על הבעיה.
cya
_____________________________________
C pogrammers never die. They are just cast into void.
|