Εργαστήριο Τεχνολογίας Λογισμικού
0 votes
1.0k views

Σε δύο ασκήσεις της σειράς 7, όταν τρέχω το πρόγραμμά μου στο novice, μου βγάζει την ένδειξη "Command terminated by signal 11", το οποίο μου είπανε ότι σημαίνει σφάλμα κατάτημησης. Ωστόσο, όταν υπέβαλα και τα δύο προγράμματα στον grader, περάσανε όλα τα cases και τα δύο. Ειδικά στο ένα πρόγραμμα, επειδή διατρέχω τον πίνακα που έχω ορίσει από τις ακραίες προς τις εσωτερικές θεσεις, μου φαίνεται πολύ δύσκολο να έχω ξεπεράσει τα όρια του πίνακα.

in progintro by (210 points) | 1.0k views
0

το πιο πιθανο λαθος με πινακα που μπορω να μαντεψω ειναι να χρησιμοποιεις λαθος ορια απο αγνοια.
γενικα ενας πινακας α[Ν] εχει θεσεις απο α[0] μεχρι α[Ν-1], οποτε το να προσπελαυνεις τη θεση α[Ν] δινει σφαλμα κατατμησης

αν δεν ειναι αυτο τοτε πρεπει να δωσεις μερος του κωδικα για να βρουμε το προβλημα, γιατι το οτι τρεχει σε εναν υπολογιστη σωστα ενω σε αλλον οχι ειναι ενδειξη οτι ο κωδικας σου ειναι σιγουρα καπου λαθος.

2 Answers

0 votes

μου φαίνεται πολύ δύσκολο να έχω ξεπεράσει τα όρια του πίνακα

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

Στην προκειμένη, πριν από οποιαδήποτε προσπέλαση σε πίνακα τύπωσε το index που τον κάνεις access και το μέγεθος (π.χ. αν έχεις x[i] τυπώνεις i και SIZE, αν έχεις x[SIZE - i] τυπώνεις SIZE - i και SIZE δίπλα δίπλα. Οπότε θα εντοπίσεις αμέσως αν το index που κάνεις προσπέλαση είναι μεγαλύτερο ή ίσο από το SIZE. Ή αν δεις -1...

Αν σε βολεύει καλύτερα, μπορείς να το κάνεις να βαράει καμπανάκια αν είναι λανθασμένη η προσπέλαση :)

Πιθανότατα θα έχεις στείλει ήδη τον κώδικά σου σε κάποιον και θα έχει βρει το λάθος, αλλά καλό είναι να ακολουθείς το παραπάνω οποτεδήποτε κάνεις debugging. Και γενικά, είναι πολύ σημαντικότερη γνώση να μάθεις να κάνεις debugging, έναντι του να βρεις απλά το λάθος σου (και αυτό αφορά και όσους πέσουν πάνω σε αυτή την ερώτηση στο μέλλον... :) )

by (800 points)
0 votes

Το πιθανότερο λάθος όπως ανέφεραν και παραπάνω είναι ότι πας να προσπελάσεις κάποιο στοιχείο εκτός των ορίων του πίνακα.

Αν, όμως, είσαι απόλυτα σίγουρη ότι αυτό δεν συμβαίνει, τότε ένα πιθανό πρόβλημα ίσως να είναι πως εξαντλείται η stack. Πιο συγκεκριμένα, αν έχεις δημιουργήσει έναν στατικό πίνακα αρκετά μεγάλο ίσως αυτός να μην χωράει στην stack. Περισσότερες πληροφορίες σχετικά με το τι συμβαίνει, τι είναι η stack και πώς μπορείς να το λύσεις αυτό υπάρχουν στην απάντηση του @mstou εδώ: https://courses.softlab.ntua.gr/q2a/7/ορισμός-πίνακα-με-μήκος-που-καθορίζεται-από-το-input

by (2.9k points)

301 questions

289 answers

288 comments

903 users