Προς το περιεχόμενο

free() stin C


silentpower

Προτεινόμενες αναρτήσεις

Δημοσ.

Χρησιμοποιω εναν pointer και κανω malloc() ενα μεγεθος γραφω μεσα στο χωρο και πριν το τελος την συναρτησης κανω free τον pointer και pointer=NULL;

To προβλημα ειναι οτι οταν ξαναμπω στην συναρτηση δηλαδη ξαναδηλωσω παλι τον pointer κανω malloc το ιδιο μεγεθος χωρου κτλ υπαρχουν μεσα οι προηγουμενες εγγραφες!μπορω να κανω κατι ωστε να δεσμευω κενο χωρο και οχι τον χωρο της προηγουμενης εισοδου στη συναρτηση?

Δημοσ.

Αυτό που περιγράφεις είναι πολύ περίεργο. Δεν είναι όμως απόλυτα σαφές τι λες. Αν μπορείς ποσταρε τη συνάρτηση που λες μήπως μπορέσω να σε βοηθήσω.

Δημοσ.

Δοκίμασε αντί να κάνεις malloc και free να χρησιμοποιήσεις κάποια συνάρτηση για μηδενισμό των δεδομένων. (π.χ. ZeroMemory(...); )

Δημοσ.
Χρησιμοποιω εναν pointer και κανω malloc() ενα μεγεθος γραφω μεσα στο χωρο και πριν το τελος την συναρτησης κανω free τον pointer και pointer=NULL;

To προβλημα ειναι οτι οταν ξαναμπω στην συναρτηση δηλαδη ξαναδηλωσω παλι τον pointer κανω malloc το ιδιο μεγεθος χωρου κτλ υπαρχουν μεσα οι προηγουμενες εγγραφες!μπορω να κανω κατι ωστε να δεσμευω κενο χωρο και οχι τον χωρο της προηγουμενης εισοδου στη συναρτηση?

 

Δεν καταλαβαίνω γιατί σε πειράζει αυτό που γίνεται, η malloc() σου επιστρέφει μη αρχικοποιημένη μνήμη οπότε δεν πρέπει να βασίζεσαι στο περιεχόμενό της. Αν θέλεις όμως αρχικοποιημένη σε 0 μνήμη, χρησιμοποίησε την calloc() αντί της malloc(). Κοίταξε τα ορίσματα που παίρνει και τι επιστρέφει.

Δημοσ.

Απλά μόλις καλέσεις επιτυχώς την malloc ύστερα κάλεσε την memset θέτοντας τα περιεχόμενα του μπλοκ σε μηδέν.

 

Υ.Γ.

Ουσιαστικά δεσμεύσεις κενό χώρο, απλά η malloc δεν τον καθαρίζει καθώς δεν υποχρεούται από το ANSI C πρότυπο οπότε το περιεχόμενο του μπλοκ εξαρτάται από την υλοποίηση του compiler σου.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...