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

απορία σε απλό κώδικα στην C με struct


maniac89

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

ok, ευχαριστώ για την βοήθεια!

Τώρα θέλω να διαβάσω από ένα αρχείο ένα string και να το αποθηκεύσω στon *pos_term.

Ενώ κάνω μόνο malloc για ένα char

>
pos_term=(char*)malloc(sizeof(char));

τρέχει κανονικά και αποθηκεύει και τεράστιες λέξεις.

Από ότι κατάλαβα αυτό είναι σαν να αποθηκεύεται στην πρώτη θέση ενός "πίνακα".

 

Αυτό είναι πλάγιο πλεονέκτημα του πως δουλεύουν οι περισσότεροι allocators.

 

Καταρχήν να πούμε πως όταν δεσμεύεις μνήμη για ένα char, κανείς δεν σε εμποδίζει να πας να γράψεις 5 θέσεις μετά γιατί η C δεν έχει έλεγχο ορίων. Όταν τώρα ζητάς ένα μέγεθος μνήμης, οι περισσότεροι allocators σου δίνουν παραπάνω μνήμη από αυτή που ζητάς. Για παράδειγμα μπορεί εσύ να ζητήσεις 1 byte και να σου δώσει 16. Ένα άλλο σενάριο είναι να έχεις δεσμεύει μνήμη για πολλές μεταβλητές και αυτή να είναι συνεχόμενη οπότε όταν πας να γράψεις έξω από την 1η να πέφτεις στον χώρο της 2ης.

 

Έτσι μπορεί 5 φορές από τις 10 που τρέχεις το πρόγραμμα να φαίνεται ότι λειτουργεί σωστά (στη πραγματικότητα όμως _δεν_ λειτουργεί σωστά) και τις άλλες 5 να χτυπάει όπως σου είπε ο migf1.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...