28-02-2006, 22:19
|
|
|
|
חבר מתאריך: 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... נראה לך הגיוני?
עכשיו... לבעיה העיקרית:
מה זה כל הבלבול הזה עם realloc?
אני לא אתחיל לעבור עכשיו על כל הקוד, כי אני קצר בזמן.
המלצה שלי - לצורך העניין (אני מניח שזאת תוכנית די פשוטה - או תרגול רק), הייתי הולך על רשימה ע"מ לשמור את הנתונים.
כל ההקצאות החוזרות האלו זה סיוט - ולעבור עליהן עכשיו ב11 בלילה, עוד יותר
אם לא הסתדרת עד מחר, אני אשב על התוכנית קצת - נראה מה אפשר לסדר.
לא רוצה לחכות עד מחר?
מצויין, דבר ראשון שהייתי עושה זה לבדוק את הערך המוחזר מכל ההקצאות.
התוכנית שלך מניחה מראש שכל ההקצאות עברו בהצלחה... אבל זה לא הולך ככה.
אז, תבדוק את הערכים המוחזרים - תשתמש ב-perror ע"מ לדעת מה הבעיה וככה לאט לאט תצליח להעלות על הבעיה.
cya
_____________________________________
C pogrammers never die. They are just cast into void.
|