Παρασκευή 1 Απριλίου 2011

Segmentation fault

Δεν έχεις ιδέα, και το εννοώ, πραγματικά δεν έχεις ιδέα, πόσες φορές το έχω δει αυτό το μήνυμα τις τελευταίες ημέρες. Γιατί; Μα αφού ήταν η παράδοση της εργαστηριακής άσκησης του μαθήματος του Προγραμματισμού! Και τί σχέση έχω εγώ; Μα αφού είμαι βοηθός! 
Κάτσε τώρα, τι εννοείς, και τι έγινε; Δεν πρέπει δηλαδή να βοηθήσω; Όχι λες, ε; Καλά, άποψή σου...

Τέλος πάντων, εγώ έχω να σου πω τι είναι αυτό το segmentation fault. Γιατί με το να το δω τόσες φορές, δεν μπορεί, κάπου αναρωτήθηκα κι εγώ, λέω τι στο καλό είναι αυτό; Λοιπόν, αυτό είναι κάτι που γίνεται όταν εσύ, ενώ έχεις φτιάξει ωραία και καλά το πρόγραμμά σου και χαίρεσαι, και όταν αυτό τρέχει, πάει κάτι και ζητάει πράγματα που είτε δεν ξέρει πού να τα βρει, είτε απλά δεν μπορεί να πάει να τα ψάξει, στη μνήμη του υπολογιστή. Πες ρε αδερφέ ότι πας να ανοίξεις ένα αρχείο, και ενώ νομίζεις πως το έχεις κάνει μια χαρά, αυτό, σαν ύπουλη ύπαρξη που είναι, δεν ανοίγει! Ε, όταν εσύ πας να διαβάσεις ή να γράψεις από το αρχείο, θα σου πει ότι κάτι δεν πήγε καλά με το να σου πετάξει segmentation fault. 

Τώρα θυμάμαι... πόσες άπειρες ώρες μπροστά από τον υπολογιστή έχω περάσει... Να κάθεσαι και να κοιτάς τον κώδικα, σχεδόν παρακαλώντας τον να σου πει ο ίδιος ποιο είναι το πρόβλημα και πως λύνεται. Να προσπαθείς να κοιμηθείς, και μπροστά στα κλειστά σου μάτια να κυκλοφορούν δείκτες, αλφαριθμητικά και ατέρμονες βρόχοι, ενώ μετράς τα πρόβατά σου μέσα σε μια while. Να προσπαθείς να θυμηθείς ποιος είναι ο αριθμός του κινητού σου, και οι μόνοι αριθμοί που μπορείς να σκεφτείς να είναι δυνάμεις του 2. Ωραίες εποχές...

Τώρα, για να σου πω την αλήθεια, έχω περάσει σε άλλη φάση. Είμαι μεν βοηθός στη C, ασχολούμαι ακόμα, και θυμάμαι αρκετά πράγματα, αλλά η κυρία μου ασχολία είναι η VB .NET, το οποίο σημαίνει πως αντιμετωπίζω άλλα προβλήματα... Αντί για cores, τώρα βρίζω τα exceptions.

Και τώρα θυμήθηκα την κορυφαία φάση. Είχα στείλει ένα ήμι-τελειωμένο project στην εταιρία όπου δουλεύω [ναι, παίρνω λεφτά για να γράφω κώδικα!] χωρίς να ελέγξω τί ακριβώς στέλνω. Την επόμενη φορά που βρέθηκα με τον κύριο Χρήστο, ο οποίος ελέγχει τα όσα στέλνω, μου λέει ο άνθρωπος με πολύ τρόπο και προσοχή "απλά, είναι καλό σε περίπτωση λάθους τί μηνύματα εμφανίζεις". Αναρωτήθηκα εγώ, και ρώτησα γιατί το λέει αυτό. Και μου είπε πως ενώ δοκίμαζε το πρόγραμμα, ωραία και καλά, ξαφνικά πάει κάτι στραβά, και πετάει μήνυμα σφάλματος. Το κείμενο του μηνύματος? "Είσαι λούγκρα! ><". Αυτολεξεί!

Σκέψου, να δουλεύεις εσύ, πρωί πρωί, να μην έχεις πιει ακόμα καφέ, που λέει ο λόγος, και ενώ κάνεις τη δουλειά σου στο γραφείο, να σου πετάγεται ένα μήνυμα στο PC, "Είσαι λούγκρα! ><". Τί μπορείς να πεις ή να κάνεις? Τίποτα! Κάτι τέτοιο έπαθε και ο κύριος Χρήστος, και πάλι καλά που γέλασε τουλάχιστον ο άνθρωπος...


Και αναρωτιέμαι εγώ, γυρίζοντας στην προηγούμενη κουβέντα... γιατί να μη προσέξεις σε ποιες θέσεις μνήμης πας και δουλεύεις!? Κράτα μια λίστα ρε αδερφέ, κάνε ένα πρόχειρο! Μη πας και πέφτεις έξω από το εύρος σου! Όπως λέει και ο Άγγελος, "αφού έχωμε το stack τσε το shιπ, τσε έναν μπόιντερς που είναι δύο μπάιτς". Τα "τσε" είναι παραπομπή στο Κρητικό, βαρύ, τρανό, υπερήφανο και μοναδικό "και", και δεν έχει σχέση με τον άλλο Τσε, όπως το shιπ  δεν έχει σχέση ούτε με καράβι, ούτε με πρόβατο, είναι απλά το heap πάντα με την προαναφερθείσα προφορά. Και η συγκεκριμένη φράση είναι από το μάθημα των Δομών Δεδομένων, έμπνευση ενός καθηγητού που δεν θυμάμαι το όνομά του. Τέλος πάντων, σημασία έχει ότι έχεις τον μπόιντερς που είναι δυο μπάιτς! Γιατί να μη τον χρησιμοποιήσεις?!


Την επόμενη φορά που θα σου πετάξει segmentation fault το πρόγραμμα που γράφεις, σε παρακαλώ, φρόντισε πρώτα να εμφανίσεις μερικές τιμές... και κοίταξε λίγο το shιπ σου. Μετά πες μου, και εγώ θα έρθω, αλλά τουλάχιστον δεν θα ψάχνομαι να καταλάβω που είναι ο μπόιντερς. Που είναι δυο μπάιτς. 



2 σχόλια: