Τι είναι το σφάλμα υπερχείλισης;

Υπάρχουν δύο τύποι σφαλμάτων υπερχείλισης . το ένα έχει να κάνει με τη στοίβα εσωτερικής μνήμης του προγράμματος και το άλλο έχει να κάνει με την ποσότητα της μνήμης που χρησιμοποιείται για την αποθήκευση δεδομένων.

Κάθε πρόγραμμα έχει ένα τμήμα μνήμης που έχει διατεθεί για μια στοίβα. Η στοίβα χρησιμοποιείται για την αποθήκευση εσωτερικών δεδομένων για το πρόγραμμα και είναι πολύ γρήγορη και παρακολουθεί τη διεύθυνση επιστροφής. Με άλλα λόγια, ένα πρόγραμμα μπορεί να μεταπηδήσει σε μια περιοχή που διαβάζει κάποια δεδομένα από το σκληρό δίσκο και στη συνέχεια επιστρέφει από αυτή τη ρουτίνα για να συνεχίσει την επεξεργασία των δεδομένων. Η στοίβα παρακολουθεί την προέλευση της διεύθυνσης και το πρόγραμμα χρησιμοποιεί αυτό για την επιστροφή. Κάτι σαν να αφήνετε ψωμιά για να βρούμε το δρόμο σας πίσω. Τούτου λεχθέντος, η στοίβα έχει περιορισμένο χώρο αποθήκευσης. Μεταξύ της χρήσης του για την αποθήκευση των διευθύνσεων επιστροφής και της χρήσης της μνήμης για την αποθήκευση των μεταβλητών, μπορεί να εξαντληθεί και όλα τα μικρά κομμάτια της υπερχείλισης δεδομένων και να προκαλέσουν την καταστροφή των προγραμμάτων.

Το πρόβλημα υπερχείλισης στοίβας δεν είναι τόσο διαδεδομένο στα νεότερα λειτουργικά συστήματα, ωστόσο, λόγω του μικρού αποτυπώματος σε κινητές συσκευές μπορεί να γίνει πρόκληση. Αν το λειτουργικό σας σύστημα στην κινητή συσκευή σας σας δίνει σφάλμα υπερχείλισης στοίβας, ενδέχεται να έχετε εκτελέσει πάρα πολλές εφαρμογές. Μπορεί να έχετε έναν ιό χρησιμοποιώντας χώρο στοίβας. Θα μπορούσατε ακόμη και να έχετε ζημιά υλικού που θα μπορούσε να προκαλέσει σφάλμα υπερχείλισης στοίβας. Ελέγξτε τη χρήση της εφαρμογής σας και την προστασία από ιούς και εκτελέστε μια εφαρμογή διαγνωστικής μνήμης στην κινητή συσκευή σας, για να δείτε εάν αυτό βοηθά να ξεκαθαρίσετε το λάθος σας.

Ένα σφάλμα υπερχείλισης που δημιουργείται από την ανάθεση αποθήκευσης αναφέρεται ως υπερχείλιση τύπου δεδομένων. Αυτό σημαίνει ότι ένας συγκεκριμένος τύπος δεδομένων που χρησιμοποιείται για την αποθήκευση ενός στοιχείου δεν ήταν αρκετά μεγάλος για να κρατήσει τα δεδομένα. Για παράδειγμα, εάν έχετε ένα κιβώτιο που υποτίθεται ότι περιέχει δέκα κουτιά σούπας, αλλά έχετε δώδεκα κουτάκια για να το βάλετε, τότε έχετε μια υπερχείλιση από δύο κουτάκια σούπας. Με τον ίδιο τρόπο, ορισμένοι τύποι δεδομένων μπορούν να αποθηκεύουν μόνο αριθμούς συγκεκριμένου μεγέθους. Εάν ένας τύπος δεδομένων είναι ένα μεμονωμένο byte και τα δεδομένα που αποθηκεύονται είναι μεγαλύτερα από 256 τότε υπάρχει ένα σφάλμα υπερχείλισης που δημιουργείται και το πρόγραμμα διακόπτεται επειδή έχει κατεστραμμένα δεδομένα.

Αυτός ο τύπος σφάλματος συνήθως συμβαίνει μόνο με παλαιότερα μηχανήματα που προσπαθούν να τρέξουν σύγχρονα λειτουργικά συστήματα, καθώς η χωρητικότητα του λειτουργικού συστήματος υπερβαίνει τη σκιά της χωρητικότητας του υλικού. Με άλλα λόγια, ενδέχεται να λάβετε σφάλματα υπερχείλισης όταν μια εφαρμογή ζητά 64 μπιτ αποθηκευτικού χώρου όταν το πρόγραμμα μπορεί να προσφέρει μόνο 32. Αυτός ο τύπος σφάλματος υπερχείλισης είναι συνήθως στους ώμους των προγραμματιστών και μπορεί να κάνει πολύ λίγοι τελικοί χρήστες για να διευκολύνουν εύκολη θεραπεία εκτός από τον έλεγχο για μια ενημερωμένη έκδοση λογισμικού ή μια ενημερωμένη έκδοση κώδικα.

Σφάλμα, Όροι προγραμματισμού, Underflow