כשמדברים על הזכרון אליו מצביעים.
מה שאתה כתבת לעיל, כעקרון יעבוד, אתה מחזיר מחרוזת קבועה שמופיעה
בקוד. אני לא מכיר שום מימוש שבו זה לא יעבוד אבל בתאוריה
התקן לא מתחייב שזה יעבוד.כמובן שלרוב אנחנו נתעניין במשהוא יותר מתוחכם, אם המחרוזת מוגדרת
על המחסנית אז וודאי שאי אפשר להחזיר אותה:
char *bad_example() { char err[10] ... return err; } [/codeלעומת זאת אם אנו מקצים דינאמית בתוך הפונקציה, אז זה וודאי יעבוד, אבל אז חייבים לזכור לשחרר את הזכרון איפה שהוא. אם קיבלנו מצביע זה הכי פשוט, כי אז זה עובד ואילו אף פונקציה לא חייבת לשחרר זכרון שלא היא הקצתה. (זה תמיד נהיה מסובך כאשר אתה מקצה במקום אחד ומשחרר במקום אחר). DRYICE
|