פורסם 2020 בפברואר 155 שנים #include "stdlib.h" int main() { int **p; p = (int**)malloc(3*sizeof(int*)); free(*p);//ok. but why? free(*p);//ok. but why? free(p);//ok. but why? free(p);// Run time error return 0; } לא מבין מדוע התכנית תקינה ורק בשורה האחרונה יש שגיאה בזמן ריצה ולא לפני כן. משהו בניהול הזיכרון הדינאמי שאני מפספס?
פורסם 2020 בפברואר 155 שנים מחבר איפה יש פה נאל? מאלוק נותן ערכי זבל. לא? ואם נאל לא עושה כלום אז למה יש שגיאה בפריי האחרון?
פורסם 2020 בפברואר 155 שנים אין לדעת מה היה לפני. פריי אחד לפני אחרון מוחק ערך אמיתי, את ה-malloc. והאחרון נותן שגיאה כי כבר מחקת אותו
פורסם 2020 בפברואר 155 שנים ציטוט של ronen062013 אז נותר לי להבין למה 2 ה free הראשונים תקינים כבר הסברתי. מאלוק לא מאתחל ל-0 אך אין זה אומר שלא הוקצה זיכרון מאותחל.
פורסם 2020 בפברואר 155 שנים מחבר אז למה ה free השני לא עושה שגיאה כמו ה free הרביעי. ובכלל, אם כבר נעשה free על *p אז למה מתאפשר לעשות free על p עצמו?
פורסם 2020 בפברואר 165 שנים free(0); לא מקריס כי יש בדיקה בפנים הפונקציה. *p מבצע קריאה מבפנים המערך. ערך הארגומנט הינו 0. p עצמו הינו הערך שמתקבל מ-malloc והינו מצביע למערך.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.