This is an old revision of the document!
Η εκτέλεση του κώδικα τερματίζεται με έναν παράξενο, μεγάλο ή/και αρνητικό αριθμό π.χ.
Process finished with exit code -1073741819 (0xC0000005)
αυτό σημαίνει ότι έχει γίνει πρόσβαση (είτε ανάγνωση, είτε εγγραφή/αλλαγή) σε περιοχή της μνήμης που δεν θα έπρεπε. Αυτό μπορεί να συμβεί με διάφορους τρόπους. Μερικοί από αυτούς γνωρίζουμε μέχρι τώρα είναι:
NULL
ή να δείχνει σε σημείο μνήμης που δεν θα έπρεπε (π.χ. μνήμη που δεν ανήκει στο πρόγραμμά σας ή μνήμη που δεν επιτρέπεται η εγγραφή).Επειδή αυτό είναι πρόβλημα όχι με το συντακτικό της γλώσσας, αλλά με την λογική του και προκύπτει κατά την εκτέλεση, έχουμε τους εξής τρόπους εντοπισμού της γραμμής ή έστω της περιοχής του κώδικά μας που δημιουργεί το πρόβλημα.
Εισάγετε μερικές εντολές printf
σε διάφορα σημεία του κώδικα της συνάρτησης που υποψιάζεστε ότι έχει το πρόβλημα (ή εάν δεν έχετε κάποια υποψία στην κεντρική συνάρτηση) ώστε κατά την εκτέλεση να δείτε μέχρι ποιά printf
εκτυπώνεται.
Έτσι έντοπίζετε την περιοχή που “κρασάρει” όπως λέμε, ο κώδικάς σας. Εάν η περιοχή περιλαμβάνει κάποιο βρόχο καλό θα είναι τα μηνύματα της printf
να περιέχουν και τη μεταβλητή του βρόχου, π.χ. σε μία for(i=……)
να εκτυπώνεται και η τιμή του i
.
Δεν πρέπει ποτέ να ξεχνάτε ότι στο τέλος, όταν λυθεί το πρόβλημα, πρέπει να αφαιρούνται όλες αυτές οι πρόσθετες printf
.