Uninitialized Variables
Βασικές Πληροφορίες
Η βασική ιδέα εδώ είναι να κατανοήσουμε τι συμβαίνει με μη αρχικοποιημένες μεταβλητές καθώς θα έχουν την τιμή που ήταν ήδη στη μνήμη που τους ανατέθηκε. Παράδειγμα:
Συνάρτηση 1:
initializeVariable
: Δηλώνουμε μια μεταβλητήx
και της αναθέτουμε μια τιμή, ας πούμε0x1234
. Αυτή η ενέργεια είναι παρόμοια με το να κρατάμε ένα σημείο στη μνήμη και να τοποθετούμε μια συγκεκριμένη τιμή σε αυτό.Συνάρτηση 2:
useUninitializedVariable
: Εδώ, δηλώνουμε μια άλλη μεταβλητήy
αλλά δεν της αναθέτουμε καμία τιμή. Στη γλώσσα C, οι μη αρχικοποιημένες μεταβλητές δεν ορίζονται αυτόματα σε μηδέν. Αντίθετα, διατηρούν την τιμή που ήταν τελευταία αποθηκευμένη στη θέση μνήμης τους.
Όταν εκτελέσουμε αυτές τις δύο συναρτήσεις σειριακά:
Στην
initializeVariable
, ηx
ανατίθεται μια τιμή (0x1234
), η οποία καταλαμβάνει μια συγκεκριμένη διεύθυνση μνήμης.Στην
useUninitializedVariable
, ηy
δηλώνεται αλλά δεν ανατίθεται τιμή, οπότε παίρνει τη θέση μνήμης αμέσως μετά τηνx
. Λόγω της μη αρχικοποίησης τηςy
, κληρονομεί την τιμή από την ίδια θέση μνήμης που χρησιμοποιήθηκε από τηνx
, επειδή αυτή ήταν η τελευταία τιμή που υπήρχε εκεί.
Αυτή η συμπεριφορά εικονίζει ένα βασικό έννοια στον προγραμματισμό χαμηλού επιπέδου: Η διαχείριση μνήμης είναι κρίσιμη, και οι μη αρχικοποιημένες μεταβλητές μπορεί να οδηγήσουν σε μη προβλέψιμη συμπεριφορά ή ευπάθειες ασφαλείας, καθώς μπορεί να κρατούν ακούσια ευαίσθητα δεδομένα που παρέμειναν στη μνήμη.
Πώς Λειτουργεί:
Συνάρτηση
initializeAndPrint
: Αυτή η συνάρτηση δηλώνει μια ακέραια μεταβλητήinitializedVar
, της αναθέτει την τιμή100
, και στη συνέχεια εκτυπώνει τη διεύθυνση μνήμης και την τιμή της μεταβλητής. Αυτό το βήμα είναι απλό και δείχνει πώς συμπεριφέρεται μια αρχικοποιημένη μεταβλητή.Συνάρτηση
demonstrateUninitializedVar
: Σε αυτή τη συνάρτηση, δηλώνουμε μια ακέραια μεταβλητήuninitializedVar
χωρίς να την αρχικοποιήσουμε. Όταν προσπαθούμε να εκτυπώσουμε την τιμή της, η έξοδος μπορεί να εμφανίσει ένα τυχαίο αριθμό. Αυτός ο αριθμός αντιπροσωπεύει τα δεδομένα που υπήρχαν προηγουμένως σε αυτήν τη θέση μνήμης. Ανάλογα με το περιβάλλον και το μεταγλωττιστή, η πραγματική έξοδος μπορεί να ποικίλει, και μερικές φορές, για λόγους ασφαλείας, μερικοί μεταγλωττιστές ενδέχεται να αρχικοποιούν αυτόματα τις μεταβλητές σε μηδέν, αν και δεν πρέπει να βασιζόμαστε σε αυτό.Συνάρτηση
main
: Η συνάρτησηmain
καλεί και τις δύο παραπάνω συναρτήσεις σε σειρά, δείχνοντας την αντίθεση μεταξύ μιας αρχικοποιημένης μεταβλητής και μιας μη αρχικοποιημένης.
Last updated