Δημοσιεύτηκε: 08 Σεπ 2011, 13:21
από Star_Light
migf1 έγραψε:
......

Αν ελέγξουμε πρώτα το περιεχόμενο του δείκτη ( *src == '\0 ') τότε αν ο src είχε για παράδειγμα περαστεί με τιμή NULL στην συνάρτηση, έστω και κατά λάθος, τότε προκαλούμε segmentation-fault (και άρα κενό ασφαλείας) διότι NULL σημαίνει πως δείχνει στο ΠΟΥΘΕΝΑ (που στην πράξη σημαίνει πως δείχνει σε κάποιο τυχαίο σημείο της μνήμης ... undefined ). Οπότε, γράφοντας εμείς *src == '\0' ρισκάρουμε να μετατραπεί κάποια στιγμή στο run-time του προγράμματος σε *NULL == '\0'... κι εκεί αρχίζουν τα όργανα! :lol:

......



Eρωτήσεις :

1.Κάθε string της μορφής s1[]=""; ειναι κενό? Υπαρκτό μεν κενο δε... υπαρκτό επειδη φέρει τον μηδενικο χαρακτήρα ετσι?

2. Μπορεις να δώσεις ενα παράδειγμα απο ενα ανύπαρκτο string???

3. Εδω μπερδεύομαι λιγο γιατι ειχαμε πει πως σε απροσδιόριστη περιοχή δείχνουν μονο οι άκυροι δείκτες ενω ενας δείκτης ο οποίος δειχνει σε NULL δεν εχει μεν περιεχομενα αλλα ειναι έγκυρος.

4. Αν τα ορίσματα ήταν απλοί πίνακες (ωστε να εξασφαλίσουμε οτι καταρχην δεν θα μας άφηνε να δωσουμε NULL ουτε και κατα λαθος και επισης πως η ομαλή δέσμευση γίνεται αυτόματα) τοτε θα υπήρχε και διαφορά οταν θα τα βάζαμε σαν ορίσματα στην συνάρτηση??? θελω να πω δεν θα τα περνουσαμε ως δείκτες ετσι... αλλα παιζει να ειναι και περιττη αυτη η ερωτηση μιας και το λες και ο ιδιος οτι δεν θα τα διαχειριστουμε ως δεικτες.

5. Όταν δηλώνεις εναν δεικτη απλα πχ
Κώδικας: Επιλογή όλων
int *p;


περα απο το οτι δεν ειναι αρχικοποιημενος... δεν δεσμεύεται μνήμη για αυτον? Πρεπει αναγκαστικά να δωσεις calloc για να γινει έγκυρη αυτη η μνήμη? ΔΗλαδη ας πουμε αν ορισω εγω εναν δεικτη ουσιαστικα θα έχει απλα το προκαθορισμενο μέγεθος που είπαμε ειναι ιδιο για ολα τα data types χωρις αυτο να σημαινει πχ οτι τον έχω δεσμεύσει ωστε να μπορει να δείχνει για 10 θέσεις ας πουμε αν εγω πιο μετα σε ενα while τον αυξάνω με αριθμητικη δεικτων ε?

6. ΣΤο παρακατω απόσπασμα κώδικα

Κώδικας: Επιλογή όλων

if (src)
{
free(src);
src=NULL;
}


Το if(src) ειναι ισοδυναμο με το if(src!==NULL)
ενω το *src!=0 θα ίσχυες αν το string δεν ηταν κενό ?

Τέλος άν έχεις χρονο ριξε μια ματια και στους παραπανω κωδικες με spoiler που έβαλα ετσι μηπως εκανα καμια γκάφα αθελα μου ως προς λογικο λάθος. Thanx ;)