Παραβίαση ορίων πίνακα

Ξεκίνησε από lala, 03 Φεβ 2025, 01:05:02 ΜΜ

« προηγούμενο - επόμενο »

lala

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

andreas_p


George Eco

#2
Αντικανονικου τερματισμου.
Δε θα ολοκληρωθεί το πρόβλημα για να το πεις λογικό.
Ακόμα κι από λογικό λάθος να καταλήγεις σε κάτι που θα "σκάσει" το πρόγραμμα, το κατατάσσεις σε αντικανονικό τερματισμό.
Σωστό το ένστικτό σου.

EDIT:
5.2.3 του νέου βιβλίου του Υπουργείου. Αντιμετωπίζεται ως λογικό σφάλμα.

Βλέπε απάντηση 14 του ίδιου thread.

petrosp13

Έχει αντίστοιχο παράδειγμα και το νέο σχολικό βιβλίο
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

gpapargi

Δοκίμασε να γράψεις ένα πρόγραμμα και εκτέλεσέ το στο Διερμηνευτή της ΓΛΩΣΣΑΣ να δεις τι θα συμβεί. Πχ


ΠΡΟΓΡΑΜΜΑ τερματισμός
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: α[5], ι
ΑΡΧΗ
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 5
    α[ι] <- 1
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ 'Αυτή η εντολή θα εκτελεστεί'
  α[6] <- 6
  ΓΡΑΨΕ 'Αυτή η εντολή ΔΕ θα εκτελεστεί'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Γιώργος Παπαργύρης

martha-ts

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

petrosp13

Και να'ταν η μόνη αστοχία, τι ψάχνεις...

Λέει πιο πριν ότι τα λάθη που κυρίως μας απασχολούν είναι τα λογικά και τα λάθη κατά την εκτέλεση, οπότε μάλλον έτσι καλύπτεται
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

alkisg

Είναι λογικό λάθος, που σε μερικές γλώσσες / περιβάλλοντα θα προκαλέσει αντικανονικό τερματισμό. Δηλαδή στο πλαίσιο της ΓΛΩΣΣΑΣ, "και τα δύο".

Σε άλλα περιβάλλοντα μπορεί να μην προκαλέσει τερματισμό, και μπορεί να χρησιμοποιηθεί από malware για buffer overrun, μία από τις τεχνικές διάδοσης των ιών.

George Eco

Σωστός Άλκη, αλλά το buffer overflow, λογικά είναι ακόμα πέραν των πλαισίων του μαθήματος, αν δε κάνω λάθος.
Νομίζω πως αν ερωτηθούν τα παιδιά στις Πανελλήνιες, θα πρέπει να μείνουν στον αντικανονικό τερματισμό.

evry

Παράξενο, στη C που το δοκίμασα δουλεύει μια χαρά , δε βγάζει λάθος
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

George Eco

Μήπως ο gcc αντιμετωπίζει τους πίνακες ως δυναμικές δομές;
Δε βρίσκω άλλη εξήγηση. 
Μήπως να ρωτήσω στο stack overflow;

evry

Αυτό που έκανα είναι λογικό λάθος και όχι λάθος αντικανονικού τερματισμού, αφού .... τερματίζει κανονικά.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

George Eco

#12
Όχι. Δεν είναι καν λάθος. Αυτό είναι το πρόβλημα. Αντιμετώπισε το πίνακα σα δυναμική δομή και αυξησε τη διάστασή του. Σου επέστρεψε το 200!!!!

EDIT:  Δεν αντιμετώπισε το πίνακα σα δυναμική δομή. Προξενήθηκε buffer overflow κι απλά σκασίλα του.

George Eco

#13
Έχει δίκιο και ο Άλκης και ο Ευριπίδης.

https://stackoverflow.com/questions/79419175/are-arrays-treated-as-static-data-structures-by-gcc-compiler-or-as-dynamic#79419190

Ο gcc  προκαλεί το buffer overflow, αλλά συνεχίζει κανονικά το πρόγραμμα να τρέχει κι ολοκληρώνει.
Οπότε είναι ΛΟΓΙΚΟ σφάλμα. Άρα είναι αναλόγως τον compiler και τη συμπεριφορά του και φυσικά επειδή η ΓΛΩΣΣΑ είναι επί χάρτου ορισμένη και ΔΕΝ έχει compiler, καταλήγουμε στα γνωστά γκρίζα νερά της ασάφειας του μαθήματος.

https://stackoverflow.com/questions/12410016/why-dont-i-get-a-segmentation-fault-when-i-write-beyond-the-end-of-an-array?noredirect=1&lq=1
Η αποδεκτή απάντηση κι εδώ ξεκαθαρίζει πως πρέπει πάντα στη C να τσεκάρεις ΕΣΥ τα όρια του πίνακα. Δε λειτουργεί σα τη Java.

George Eco

Για το μάθημα της Γ Λυκείου πάντως, ΠΙΣΤΕΥΑ πως θα πρέπει να το αντιμετωπίζαμε ως αντικανονικού τερματισμού.
Ωστόσο από το καινουργιο βιβλίο... δείτε....

5.2.3 Εκσφαλμάτωση λογικών λαθών σε πίνακες
Σελ 132

Είναι ξεκάθαρα λογικό.
Διορθώνω και την από πάνω απάντησή μου.

Για ευκολία πάρτε και το link του βιβλίου...
https://iep.edu.gr/images/IEP/Modules/Sj_K2_Extra_Slider/Fakeloi_Ylikou/Pliroforiki-sympliromatiko-ekpaideytiko-yliko.pdf