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

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