עבור לתוכן
  • צור חשבון
  • מי אנחנו?

    שלום אורח/ת!

     
    שים לב - על מנת להשתתף בקהילה שלנו, להגיב ולפתוח דיונים חדשים, עליך להצטרף כחבר רשום.

    החברים שלנו נהנים מיתרונות רבים, כולל היכולת להשתתף בדיונים, להנות מהגרלות ומבצעים לחברי האתר, ולקבל מידי שבוע את התכנים הבולטים שלנו ישירות במייל.

    לא אוהבים שמציקים לכם במייל? ניתן להירשם לאתר אך לוותר על הרישום לעידכוני המייל השבועיים.

ronen062013

שפת c - הקצאות דינאמיות

Recommended Posts

#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;
}

לא מבין מדוע התכנית תקינה ורק בשורה האחרונה יש שגיאה בזמן ריצה ולא לפני כן. משהו בניהול הזיכרון הדינאמי שאני מפספס?

 

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

איפה יש פה נאל? מאלוק נותן ערכי זבל. לא?

ואם נאל לא עושה כלום אז למה יש שגיאה בפריי האחרון?

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

אין לדעת מה היה לפני.

 

פריי אחד לפני אחרון מוחק ערך אמיתי, את ה-malloc.

והאחרון נותן שגיאה כי כבר מחקת אותו

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים
ציטוט של ronen062013

אז נותר לי להבין למה 2 ה free הראשונים תקינים

כבר הסברתי. מאלוק לא מאתחל ל-0 אך אין זה אומר שלא הוקצה מאותחל.

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

אז למה ה free השני לא עושה שגיאה כמו ה free הרביעי. ובכלל, אם כבר נעשה free על  *p אז למה מתאפשר לעשות free על p עצמו?

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

free(0); לא מקריס כי יש בדיקה בפנים הפונקציה.

*p קריאה מבפנים המערך. ערך הארגומנט הינו 0.

p עצמו הינו הערך שמתקבל מ-malloc והינו מצביע למערך.

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

הצטרפ/י לדיון

בשלב זה תוכל/י להצטרף לדיון, ולאחר מכן להצטרף לקהילה שלנו. אם כבר יש לך חשבון אצלנו, אנא התחבר/י עכשיו על מנת להגיב תחת שם המשתמש שלך.
לתשומת לבך: התגובה תופיע לגולשים לאחר אישור של צוות הנהלת הפורומים.

אורח
הוסף תגובה

×   התוכן שהודבק הוא עם עיצוב.   הסר עיצוב

  Only 75 emoji are allowed.

×   הקישור שלך הוטמע אוטומטית.   הצג כקישור רגיל

×   התוכן הקודם שלך שוחזר אוטומטית.   נקה הכל

×   You cannot paste images directly. Upload or insert images from URL.


×
  • צור חדש...
Back to top button
Close
Close