Δημοσιεύτηκε: 24 Μαρ 2011, 19:10
από simosx
Κώδικας: Επιλογή όλων
char *line = NULL;
read = getline(&line, &len, stdin);


Εδώ έχει πρόβλημα. Γράφεις σε περιοχή μνήμης που δε θα έπρεπε. Αν γράψεις λίγο παραπάνω θα καταρρεύσει το πρόγραμμά σου.

Ο τρόπος επίλυσης;

Θέλεις είσοδο κειμένου από το τερματικό. Το τερματικό επιβάλει κάποιο όριο, και νομίζω ότι υπάρχει σταθερά MAX_LENGTH ή κάτι τέτοιο στο stdio.h ή στο unistd.h (ψάξε). Οπότε, για είσοδο από το τερματικό, γνωρίζεις το μέγιστο που μπορεί να μπει, και φτιάχνεις έναν ενταμιευτή (buffer) για να λαμβάνει τέτοιες τιμές. Φυσικά, μόλις λάβεις την τιμή, την αντιγράφεις κάπου αλλού, για να χρησιμοποιήσεις το μεγάλο ενταμιευτή ξανά, για άλλη εισαγωγή από το τερματικό.

Όταν γράφεις σε μνήμη που κανονικά δεν πρέπει, μπορεί να έχεις παράξενες επιπτώσεις.
Δες για παράδειγμα το viewtopic.php?f=61&t=17612 και προσπάθησε να εξηγήσεις γιατί δουλεύει το πρόγραμμα με τον τρόπο που λειτουργεί.