unsafe code

  • פותח הנושא rnan
  • פורסם בתאריך

rnan

New member
unsafe code ../images/Emo128.gif

היי אני לומד עכשיו על UNSAFE CODE ואני לא מבין דבר אחד UNSAFE משמעו שהוא יהיה UNMANNAGED CODE כלומר בעבודה מסוכנת כביכול עם פויינטרים אז , המערכת לא תתעסק איתם ?? אז למה לא לשים TRY CATCH ???? ואז אני יוכל לתפוס בעיות ? אני מפספס משהוא / ים ... אשמח לתשובה מורחבת
 

HaRmosh

New member
...

לא מחייב ש-Exceptions ינבעו משימוש בקוד לא מנוהל... מה אם תנסה לחלק ב-0 בתוך קטע קוד unsafe ? try ו-catch לחלוטין לא קשורים לצורת העבודה עם ניהול הזכרון (גם ב-++C זה היה קיים).
 
אין קשר

אם אתה כותב קוד נכון, התוכנית תעבוד. אם אתה כותב קוד לא נכון, אתה יכול לאבד הרבה זיכרון ועדיין לא תקבל שום exception.
 
זה עדיין יהיה לא בטוח מבחינת המערכת

כלומר, כנראה שאכן תוכל למנוע מהתוכנה שלך "ליפול" כתוצאה משגיאה בקוד הלא מנוהל, אבל ברמת המערכת בכלל זה עדיין נחשב לקטע קוד לא בטוח שכן ההשגחה על הקוד מתבצעת רק ע"י מערכת ההפעלה ולא ע"י סביבת הCLR. זה ישאיר ללא טיפול בעיות כמו בריחות זיכרון, גרסאות DLLים, וריבוי נימים. לכן יתכן ותתקל באדמיניסטראטורים של יאסרו ביצוע של קטעי קוד "לא בטוחים". לגבי Try…Catch, אכן שגיאה (כמו חילוק ב0) שתתרחש בקוד הלא מנוהל תיזרק שנית ע"י מערכתCLR כשגיאה מוכרת עבור סביבת NET, אחרי שתעבור המרה (שלא תמיד נכונה).
 

t1tan

New member
תשוה לעבודה עם פוינתרים

private unsafe static void main() { int a, b, c = 0; int* pa, pb, pc; //pointing poiters to variables addresses pa = &a; pb = &b; pc = &c; int*[] pArr = { pa, pb, pc }; }
 
למעלה