17-03-2012, 00:12
|
|
|
חבר מתאריך: 30.07.05
הודעות: 949
|
|
לגבי השאלה הראשונה אני מסכים עם פסטן שכנראה שאתה לא מקצה מספיק זיכרון (זכרת את ה-0\ שיוכנס לסוף המחרוזת?)
לגבי השאלה השניה:
אתה מקצה בלוק זיכרון ויכול לשחרר אותו עם free בבת אחת. אתה לא יכול לשחרר אותו בחלקים, כלומר אפשר לעשות (free(fp ולשחרר את כל הבלוק שהקצאת, או להקצות num בלוקים כנ"ל ולשחרר אותם בנפרד.
מנגד, fclose לא עושה free. היא משחררת את המשאבים שהמערכת מקצה בפונק' fopen (את ה-file object שמכיל את ה-file descriptor והבאפרים שהקובץ משתמש בהם שמנהלת ספריית ה-stdio). היא לא משחררת את המצביע עצמו (הרי אתה יכול להקצות את המצביע סטטית על המחסנית, מה שבד"כ קורה, ואז אי אפשר לקרוא עבורו ל-free).
לכן השימוש הוא קודם לקרוא ל- fclose עבור כל איבר שעשית לו fopen ולאחר מכן לקרוא ל-free על המצביע למערך מה שישחרר את כל בלוק הזיכרון ביחד.
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.
|