23-01-2009, 07:08
|
|
|
|
חבר מתאריך: 30.10.01
הודעות: 8,699
|
|
|
מריחת זיכרון
אם אינני טועה, הודעה כזו תתקבל במקרה שבו מתבצעת כתיבה
של נתונים לכתובת זכרון מחוץ לגבולות המשתנה.
(למשל, כתיבה לתא במערך מחוץ לגבול המערך)
הקומפיילר של שפת C איננו מעניקה הגנה לגבולות משתנים
למשל שאתה יכול לכתוב לכתובת של char ערכים גדולים מbyte והם פשוט יכנסו לתאי הזיכרון הבאים.
אם במקרה בריצה מסויימת אין שם ערכים אחרים שלך או של מישהו אחר זה גם עלול לעבוד... בנתיים.
דוגמה:
קוד PHP:
char array[2];
*(array + 2) = 'X';
במקרה הזה תתבצע כתיבה של הערך 'X' לכתובת זיכרון הנמצאת שני בתים אחרי תחילת המערך.
הבעיה היא שאורך המערך כולו הוא רק שני בתים כולל ההתחלה [0]
כך שהזיכרון הזה עלול להיות בשימוש של משתנה אחר
או לעצבן את מערכת ההפעלה ולהפיל אותך בזמן ריצה
_____________________________________
_________________________________________________
אזהרה: משרד הבריאות קובע כי העישון מזיק לבריאות !
תראו, אפילו החייזר נהיה ירוק מזה
|