User Tools

Site Tools


qna:misc:runtime:crash-or-long-return-value

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
qna:misc:runtime:crash-or-long-return-value [2021/04/19 10:40]
xallos
qna:misc:runtime:crash-or-long-return-value [2022/05/28 16:47] (current)
xallos
Line 13: Line 13:
  
   * Πρόσβαση σε στοιχεία του πίνακα **έξω από τα όρια του πίνακα** (είτε με αρνητικό δείκτη, είτε δείκτη μεγαλύτερο ή ίσο από το μήκος του πίνακα).   * Πρόσβαση σε στοιχεία του πίνακα **έξω από τα όρια του πίνακα** (είτε με αρνητικό δείκτη, είτε δείκτη μεγαλύτερο ή ίσο από το μήκος του πίνακα).
 +  * Η τιμή ενός δείκτη (**pointer**) να **είναι ''NULL''** ή να δείχνει σε σημείο μνήμης **που δεν θα έπρεπε** (π.χ. μνήμη που δεν ανήκει στο πρόγραμμά σας ή μνήμη που δεν επιτρέπεται η εγγραφή).
 +  * Μία περίπτωση όπου η μνήμη δεν επιτρέπει την εγγραφή, είναι σε κείμενο δηλωμένο μέσα στον κώδικα σε διπλά εισαγωγικά. (πχ ''char *T = "Hello";'' και μετά ''T[0] = 'Y';'')
  
 ==== Μέθοδοι επίλυσης ==== ==== Μέθοδοι επίλυσης ====
Line 25: Line 27:
  
 Δεν πρέπει ποτέ να ξεχνάτε ότι στο τέλος, όταν λυθεί το πρόβλημα, πρέπει να αφαιρούνται όλες αυτές οι πρόσθετες ''printf''. Δεν πρέπει ποτέ να ξεχνάτε ότι στο τέλος, όταν λυθεί το πρόβλημα, πρέπει να αφαιρούνται όλες αυτές οι πρόσθετες ''printf''.
 +
 +=== Με τη χρήση του Debugger ===
 +
 +Αφού αφαιρέσετε ή απενεργοποιήσετε όλα τα breakpoints, εκτελέστε τον κώδικα μέσω του debugger. Τότε η εκτέλεση θα διακοπεί στη γραμμή που παράγει το σφάλμα.
 +
 +<WRAP info>**Εάν δεν έχετε προηγούμενη εμπειρία από τη χρήση του debugger**, τότε πατώντας το κουμπί δεξιά από το Run (το 2ο) στη γραμμή εργαλείων εκτέλεσης, ξεκινά η εκτέλεση του προγράμματος σε debugging mode, το οποίο σημαίνει ότι όταν προκύψει σφάλμα όπως αυτά που οφείλονται σε λανθασμένη χρήση pointers (δεικτών), εμφανίζει τη γραμμή που προέκυψε στο σφάλμα. Τις περισσότερες φορές αυτή η γραμμή είναι μέσα στον κώδικα που γράφει ο προγραμματιστής και όχι σε κώδικα κάποιας βιβλιοθήκης. Κατόπιν με το stop (τελευταίο κουμπί στην ίδια γραμμή εργαλείων) τεραμίζεται η λειτουργία του debugging.</WRAP>
 +
 +Προσέξτε ότι __η γραμμή αυτή δεν είναι απαραίτητα η λανθασμένη__, αλλά μπορεί να είναι αυτή που παρουσιάζει την... παρενέργεια του σφάλματος που υπάρχει σε άλλη γραμμή.
 +
 +<WRAP important>**Προσοχή!** Υπάρχουν μερικές περιπτώσεις που αυτή η μέθοδος δεν βοηθά, αυτό π.χ. συμβαίνει ότι η εκτέλεση τερματίζεται μέσα σε κάποια συνάρτηση του συστήματος. Σε αυτές τις περιπτώσεις, εάν υπάρχει η δυνατότητα μπορεί να μας βοηθήσει το stack trace που εμφανίζεται αριστερά στα εργαλεία του debugger.
 +
 +Μερικές φορές όμως δεν αρκεί ούτε αυτό. Για αυτές τις ελάχιστες περιπτώσεις μας μένει η ''printf'' όπως περιγράφεται παραπάνω, η εμπειρία του προγραμματιστή και η φαντασία του!</WRAP>
 +
 +
qna/misc/runtime/crash-or-long-return-value.1618828835.txt.gz · Last modified: 2021/04/19 10:40 by xallos