השחתת זיכרון – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
שן שש זעם (שיחה | תרומות)
מ שינויי ניסוח קלים
שן שש זעם (שיחה | תרומות)
מאין תקציר עריכה
שורה 1:
'''השחתת זכרון''' (Memory corruption) הוא סוג של [[באג]], אשר קורה כאשר מיקום ב[[זכרון מחשב]] או [[אוגר]] משוכתב באופן מקרי ולא מבוקר, כתוצאה משגיאה ב[[תכנות]]. טעות כזו יכולה לגרום לקריסה מיידית של ה[[תוכנה]] (למשל במקרה של כתיבה לכתובת 0, התוכנית תיזרק על ידי [[מערכת הפעלה|מערכת ההפעלה]] בעקבות שגיאת סיגמנטציה). מנגד, ייתכן גם שהשגיאה לא תבוא לידי ביטוי למשך זמן רב, ולרק עבור קלטים מסוימים יופיע פלט שגוי.
 
דוגמא בולטת להשחתת זכרון היא נסיון גישה לתא במערך כאשר הוא אינו קיים. בעיה זו ניתן למצוא במרבית שפות התכנות, בחלקן תהיה הודעת שגיאה ובחלק - לא. למשל ב[[C (שפת תכנות C)|שפת התכנות C]], תאים במערך מקבלים ערכים סדורים החל מ0 ולא מ1, ולכן למעשה התא ה"n"-י (והאחרון) מקבל את התווית 1-n. טעות תכנותית נפוצה היא נסיון כתיבה לתא הלא קיים n, דבר אשר גורם להשחתת זכרון שלא בניהול המערך (אם כי, יש לציין שרוב הסיכויים שהזכרון הנפגע שייך לתוכנית הרצה ולא למערכת ההפעלה, כך שסכנה ממשית לתפקוד המחשב אין).
 
מציאת באגים כאלה יכולה להיות קשה. לכן כלי תכנות אשר מזהים טעויות כאלה אוטומטית, כגון Valgrind, הם רבי ערך.