אז ככה:
נראה שיש לך עדיין בלבול קטן בין הקצעת זיכרון, משתנה שמחזיק מצביע, והעתקת נתונים.
נתחיל לפי הסדר:
הפונקציה getname תעבוד, אבל היא עושה דבר מוזר ומיותר: היא מחזירה את הכתובת שקיבלה. למה?
פונקציה gets לא מבצעת הקצאות, היא רק ממלאת את הזיכרון שאתה נותן לה, לכן הכתובת למערך תווים ש-getname קיבלה לא תשתנה בתוך getname.
אז אין שום סיבה ש-getname תחזיר את הכתובת.
הפונקציה add1 תקינה, אבל יש בה כפילות מיותרת של איפוס next.
זה לא מפריע לעבודת התוכנית, אבל בודק עיקש עלול להוריד על זה ניקוד. שים לב שאת next מאפסים בכל מקרה, אז לא חייבים לעשות זאת בשני מקומות שונים.
הבלגן האמתי נמצא בפונקציה add_student, והיא כבר לא תעבוד, ואפילו לא תתקמפל!
השגיאות מתחילות בכותרת הפונקציה: לפרמטר הראשון אין שם, והפרמטר השני כנראה אמור להיות מצביע למערך תווים בשם name אבל בפועל הוא תו בודד בשם nam (בלי e בסוף).
בהמשך, אתה מנסה להשתמש ב-name אבל בפונקציה הזו name לא הוגדר.
ואז מגיע טעות לוגית קטנה, שאומנם לא תשפיע על ריצת התוכנה, אבל היא מיותר לחלוטין, והיא שגורמת לי לחשוב שלא כ"כ הבנת איך עובדים עם מצביעים:
הצורה שבה אתה קורה לפונקציה getname:
name = getname(name);
אין שום סיבה לדבר כזה: כבר שמת ב-name כתובת של זיכרון שהקצאת.
אין שום סיבה לדרוס כתובת זו.
להפך: אם getname היית מחזירה כתובת שונה, בלי לשחרר את המקורית, היית לך דליפה.
כרגע, למעט כמה דברים שאני מאמין שהם פשוט שגיאות הקלדה, התוכנית תעבוד, אבל היא לא תקבל ציון מלא בגלל כל מיני כפילויות ומעקפים מיותרים כפי שציינתי, ואם לא תדייק בקריאות לפונקציות אז היא גם עלולה להישבר.
נראה שיש לך עדיין בלבול קטן בין הקצעת זיכרון, משתנה שמחזיק מצביע, והעתקת נתונים.
נתחיל לפי הסדר:
הפונקציה getname תעבוד, אבל היא עושה דבר מוזר ומיותר: היא מחזירה את הכתובת שקיבלה. למה?
פונקציה gets לא מבצעת הקצאות, היא רק ממלאת את הזיכרון שאתה נותן לה, לכן הכתובת למערך תווים ש-getname קיבלה לא תשתנה בתוך getname.
אז אין שום סיבה ש-getname תחזיר את הכתובת.
הפונקציה add1 תקינה, אבל יש בה כפילות מיותרת של איפוס next.
זה לא מפריע לעבודת התוכנית, אבל בודק עיקש עלול להוריד על זה ניקוד. שים לב שאת next מאפסים בכל מקרה, אז לא חייבים לעשות זאת בשני מקומות שונים.
הבלגן האמתי נמצא בפונקציה add_student, והיא כבר לא תעבוד, ואפילו לא תתקמפל!
השגיאות מתחילות בכותרת הפונקציה: לפרמטר הראשון אין שם, והפרמטר השני כנראה אמור להיות מצביע למערך תווים בשם name אבל בפועל הוא תו בודד בשם nam (בלי e בסוף).
בהמשך, אתה מנסה להשתמש ב-name אבל בפונקציה הזו name לא הוגדר.
ואז מגיע טעות לוגית קטנה, שאומנם לא תשפיע על ריצת התוכנה, אבל היא מיותר לחלוטין, והיא שגורמת לי לחשוב שלא כ"כ הבנת איך עובדים עם מצביעים:
הצורה שבה אתה קורה לפונקציה getname:
name = getname(name);
אין שום סיבה לדבר כזה: כבר שמת ב-name כתובת של זיכרון שהקצאת.
אין שום סיבה לדרוס כתובת זו.
להפך: אם getname היית מחזירה כתובת שונה, בלי לשחרר את המקורית, היית לך דליפה.
כרגע, למעט כמה דברים שאני מאמין שהם פשוט שגיאות הקלדה, התוכנית תעבוד, אבל היא לא תקבל ציון מלא בגלל כל מיני כפילויות ומעקפים מיותרים כפי שציינתי, ואם לא תדייק בקריאות לפונקציות אז היא גם עלולה להישבר.