Δημοσιεύτηκε: 11 Απρ 2012, 18:01
Ilias95 έγραψε:Κατάλαβα, ευχαριστώ για τις απαντήσεις.
Μία ακόμα απορία.
Αν ο προγραμματιστής δεν φροντίσει να απελευθερώσει την μνήμη που δέσμευσε δυναμικά μέσα απ' το πρόγραμμα πριν αυτό τερματίσει ποιες μπορεί να είναι οι συνέπειες;
Στα δημοφιλή, σύγχρονα λειτουργικά συστήματα δεν υπάρχει πρόβλημα, γιατί αποδεσμεύουν αυτόματα τη μνήμη που έχει δεσμεύσει το πρόγραμμα. Επίσης, η C99 επιβάλλει την αποδέσμευση ακόμα κι αν δεν υπάρχει free() (όπως και το κλείσιμο τυχόν αρχείων, χωρίς να υπάρχει fclose(), και μερικά ακόμα)... αλλά δεν υλοποιούν όλοι οι compilers όλα τα στάνταρ (πρέπει για τον καθένα τους να δει κανείς στην τεκμηρίωσή τους ποια στάνταρ υλοποιούν).
Σε πιο εξειδικευμένες πλατφόρμες (π.χ. στα ενσωματωμένα συστήματα) ενδέχεται να μην απελευθερώνεται αυτόματα η μνήμη. Δηλαδή σε γενικές γραμμές δεν μπορούμε να είμαστε σίγουροι (εκτός αν προγραμματίζουμε για συγκεκριμένη πλατφόρμα, για την οποία ξέρουμε την συμπεριφορά της).
Επίσης σε γενικές γραμμές, θεωρείται bad-practice να μην απελευθερώνεις τη μνήμη που έχεις δεσμεύσει, γιατί εγκυμονεί κινδύνους. Πες για παράδειγμα πως το κύριο πρόγραμμά σου καλεί child processes που δεσμεύουν μνήμη δυναμικά και δεν τη κάνουν free() όταν επιστρέφουν. Πολύ σύντομα θα μείνει χωρίς μνήμη το κύριο πρόγραμμα. Κάτι παρόμοιο μπορεί να συμβεί και σε κώδικες βιβλιοθηκών που δεν κάνουν free().
έγραψε:Επίσης κάτι άλλο σχετικά με την άσκηση που υπάρχει στο τέλος των σημειώσεων εδώ: http://x-karagiannis.gr/prog/libs/conte ... lists6.php
Είναι εντάξει να θεωρήσουμε ότι οι λέξεις θα έχουν ένα standar max μήκος ή μπορούν να έχουν οποιοδήποτε μήκος και το πρόγραμμα πρέπει να δουλεύει σωστά ακόμα και εάν ο χρήστης δώσει μία λέξη 200 χαρακτήρων;
Κάνε το αρχικά όπως λες. Αν μετά έχεις όρεξη, κάνε το και χωρίς όριο