Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> Προγραμματισμός Υπολογιστών Γλώσσες

Τι είναι Stack Overflow στην γραμμή 42

; υπερχείλιση της στοίβας προκύπτει όταν η στοίβα , ένα κρίσιμο δομή δεδομένων που βρέθηκαν σε κάθε πρόγραμμα που εκτελείται , υπερβαίνει τα όρια της μνήμης . Αυτή η κατάσταση έχει πολλές αιτίες , όλα τα συμπτώματα των σφαλμάτων προγραμματισμού . Εάν το σφάλμα σε ένα εμπορικό ή ανοικτό πρόγραμμα πηγής , επικοινωνήστε με tech-support . Αν το πρόβλημα παρουσιάζεται κατά τη δοκιμή τον δικό σας κώδικα , εδώ είναι μερικά από τα πιο κοινά προβλήματα που μπορεί να έχουν συμβεί στη γραμμή 42 . Ιστορικό
Η

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

Αναδρομή συμβαίνει όταν μια λειτουργία αυτοαποκαλείται . Ας εξετάσουμε το ακόλουθο κώδικα :

countNodes Λειτουργία ( κόμβος ) Για κάθε childNode σε nodenodeCount + = 1countNodes ( childNode ) ΕπόμενοΤέλος λειτουργία

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

Ας υποθέσουμε ότι τον προγραμματιστή πληκτρολογήσει κόμβο αντί του παιδιού κόμβου ως εξής : .

CountNodes Λειτουργία ( κόμβος ) Για κάθε childNode σε nodenodeCount + = 1countNodes ( Node) ΕπόμενοΤέλος λειτουργία

Σε αυτή την περίπτωση , η λειτουργία θα αυτοαποκαλείται επ 'αόριστον και πραγματοποιείται υπερχείλιση στοίβας .

Η Hidden Αναδρομή
Η

Στις περισσότερες περιπτώσεις , προγραμματιστές δεν είναι σκόπιμα γραπτώς αναδρομικό κώδικα, αλλά και αναδρομή μπορεί να συμβεί σε πιο λεπτούς τρόπους . Εξετάστε αυτές τις τρεις λειτουργίες :

loadAccount Function ( ) LoadMainAccount ( ) loadTransactions ( ) συνάρτηση Τέλος

loadMainAccount Function ( ) loadAssociatedAccounts ( ) το τέλος της λειτουργίας

loadAssociatedAccounts λειτουργία ( ) loadAccount ( ) το τέλος της λειτουργίας

Στην περίπτωση αυτή , αναδρομή συμβαίνει έμμεσα, όταν μια συνάρτηση καλεί μία άλλη συνάρτηση που καλεί κατά λάθος την πρώτη λειτουργία . Το αποτέλεσμα μπορεί να διαρκέσει λίγο περισσότερο , αλλά το αποτέλεσμα είναι μια υπερχείλιση στοίβας .
Εικόνων Μεγάλες Παράμετροι
Η

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

μεταβλητές Πρωτοδικείο είναι εκείνες που ενσωματώνονται μέσα στη συνάρτηση . Για παράδειγμα :

δείγμα Λειτουργία ( ) N = getCounter ( ) Επιστροφή n * 12End λειτουργία

Η μεταβλητή n είναι μια μεταβλητή παράδειγμα , δεδομένου ότι υπάρχει μόνο όταν το δείγμα η λειτουργία εκτελείται . Σε πολλές γλώσσες , n παίρνει έσπρωξε στη στοίβα , τότε έσκασε μακριά όταν η λειτουργία τερματίζεται. Αυτό λειτουργεί καλά για απλές μεταβλητές , όπως ακέραιους αριθμούς και τους χαρακτήρες , αλλά μπορεί να πληρώσει τη στοίβα , όταν οι μεγάλες συστοιχίες χρησιμοποιούνται . Όταν αυτό γίνεται ένα πρόβλημα , μπορείτε να χρησιμοποιήσετε ενσωματωμένες δομές δεδομένων όπως χορδές ή τους καταλόγους . Οι δομές αυτές κατανέμουν συνήθως μνήμη στο σωρό , ένα ξεχωριστό , πολύ μεγαλύτερη περιοχή της μνήμης .
Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα