פורסם 2018 בפברואר 77 שנים האם השורות בקוד להלן חוקיות? int arr[] = {1,1,3}; int *p = arr; p+=10; /*האם חוקי*/ arr[-1]; /*האם חוקי*/ printf("%p", arr[-1]); /*האם חוקי*/
פורסם 2018 בפברואר 77 שנים הכל חוקי. C לא בודק גלישות ממערך. אולי זה יקרוס מתישהו ואולי לא. מעשית, הגדרת פה מערך בגודל 3. מן הסתם, אין הגיון לפנות לתאים שהם לא 0, 1, 2.
פורסם 2018 בפברואר 77 שנים מחבר זה שזה מתקמפל זה בסדר. השאלה האם ההתנהגות הזו מוגדרת בשפה? האם יש הבדל בחוקיות או בהתנהגות אם אני שם ערך בכתובת לא ידועה או רק מדפיס כתובת לא ידועה?
פורסם 2018 בפברואר 77 שנים מבחינת C הכל פשוט ומוגדר היטב. מצביע הוא סה"כ מספר שהערך שלו מפורש כמו כתובת בזכרון. אפשר לבצע עליו אריתמטיקת מצביעים. אם אתה מנסה לגשת לכתובת P+X או P-X (כאשר P מצביע וX מספר), התוכנה פשוט תנסה לגשת לשם. אם יש הגנות (נגיד מנהל זכרון של המערכת) הוא יכול לזהות שאתה מנסה לגשת לכתובת שהיא לא שלך, ולזרוק אותך (segmentation fault). אם לא, אז אתה יכול פשוט לדרוס זכרון של מישהו אחר, והתוצאות תהיינה בלתי צפויות.
פורסם 2018 בפברואר 77 שנים מחבר אוקיי זה כעת ברור. אבל כאשר אני מקדם את פוינטר 9 צעדים קדימה. זה חוקי? אולי אין כתובת כזאת? אני גם יכול להיזרק רק בגלל p+=9 בלי לשים ערך? נערך 2018 בפברואר 77 שנים על-ידי Dolmiti
פורסם 2018 בפברואר 77 שנים פוינטר הוא סתם מספר, לא יקרה כלום כל עוד אתה לא מנסה לגשת למה שהוא מצביע אליו.
פורסם 2018 בפברואר 87 שנים אתקן את עצמי הוא כתובת בזכרון אבל כן בסופו של דבר כתובת בזכרון היא מספר ולא הרבה יותר מזה.
פורסם 2018 בפברואר 97 שנים מחבר אז אם אינ מבין אותך נכון, אז בעצם אני יכול לשים כל כתובת דמיונית במצביע כלשהו. רק אם אגש לתוכן של אותה כתובת אז ייתכן ואקבל שגיאה
פורסם 2018 בפברואר 107 שנים אני סתם סקרן לדעת, בלי דעות קדומות, האם אתה לומד תכנות באופן עצמאי או שאתה לומד תואר הקשור למחשבים? ככה או ככה הייתי מאוד ממליץ שתלמד לעומק את נושא המצביעים (וניהול זיכרון). C לא בודקת אותך, ומצידה אתה יכול להכניס איזה ערך שבראש שלך למצביע - אתה זה שיתמודד עם התוצאות ותשבור את הראש בלמצוא פתרון. דווקא בגלל זה אתה צריך להבין מה אתה עושה עם מצביעים, כי כמו שזה כלי טוב - זה גם דבר מסוכן.
פורסם 2018 בפברואר 117 שנים מחבר לומד עצמאי מנסה להבין את סוג השגיאה של פניה לכתובת שאולי קיימת, האם זה כמו שגיאה של 1+1=3 שזה חוקי לחלוטין מבחינת שפת סי, או שלמעשה באופן רשמי זה לא מוגדר לפנות לכתובת מחוץ לגבול המערך
פורסם 2018 בפברואר 117 שנים מבחינת c טכנית הפעולה חוקית אבל כיוון שאתה לא יודע מה שמור בכתובת הזאת אז התוצאה של הפעולה לא מוגדרת ובסביבות עבודה שונות יכולות להיות תוצאות שונות לאותה פעולה. זה יחשב לשגיאה של המתכנת אם תכתוב קוד שפונה לאינדקס שהוא מחוץ לגבולות המארך שהוקצה לך, בהרבה המקרים המערכת בכלל לא תזרוק שגיאה ואתה תצטרך לנסות להבין לבד למה התוכנית שלך נותנת תוצאות שלא התכוונת אליהן. נערך 2018 בפברואר 117 שנים על-ידי etal
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.