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

C Προβλημα με δυναμικη διχειριση μνημης.


antonis1245

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

Δέχομαι να με διορθώνεις. Δεν έχω πρόβλημα!

 

Εμένα πάντως δε μου αρέσει να διορθώνω τέτοιους ισχυρισμούς. Και βασικά πιστεύω ότι προκαλούν και πολύ μεγάλη ζημιά σε όποιον τους κάνει, γιατί βγαίνει κάρτα ότι το 'χει φυσικότερο πράγμα στον κόσμο να μιλάει κατηγορηματικά για πράγματα που δεν ξέρει.

 

Anyway το θέμα δεν είναι ο pointer γιατί το expression *w_count είναι τύπου unsigned και εκεί η αφαίρεση λειτουργεί "κανονικά". Η προταιραιότητα του dereference είναι μεγαλύτερη από της αφαίρεσης.

 

Hint #2: δεν είναι το λάθος στην τρίτη παράμετρο... είναι στις άλλες δύο.

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

  • Απαντ. 142
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Καμία ζημιά για μένα! Ο καθένας όμως το βλέπει όπως θέλει. Όποιος ασχολείται με προγραμματισμό..συνέχεια μαθαίνει!

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

Δημοσ. (επεξεργασμένο)

BTW, έβαλες τη gets σε σχόλια, αλλά χρησιμοποιήσες scanf χωρίς περιορισμό αριθμού χαρακτήρων που θα διαβάσει στο format identifier. Foul. Είναι σα να άφησες τη gets είναι.

 

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

Επεξ/σία από gon1332
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αυτό το conio.h με εκνευρίζει! Δεν παίζει σε linux!

 

 

και εδώ τέτοιο έχουν:

http://www.learn-c.org/

[offtopic]

Ωραίοι οι τύποι. Εκτός και αν δεν κατάλαβα κάτι σωστά, πρώτη φορά βλέπω tutorial με σήμα "προστατεύεται από την DMCA" και να σου απαγορεύει να αναπαράγεις αλλού αυτά που λέει. Λες και αυτοί δεν έμαθαν την γλώσσα από κάπου αλλά γεννήθηκαν με αυτή τη γνώση και την πατεντάρουν. Άσε που γράφουν πόσες ανακρίβειες.

[/offtopic]

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

Μ'αρεσει που κολλησατε με τα allocation. Εδω ζητανε απο το παλικαρι να γραψει λεξικο απο ελληνικα στα αγγλικα. Hello! Ελληνικα. 

 

 

Και μενα μου εκανε εντυπωση αυτο πως θα γινει να παιξει με ελληνικο λεξικο.

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

Εμένα πάντως δε μου αρέσει να διορθώνω τέτοιους ισχυρισμούς. Και βασικά πιστεύω ότι προκαλούν και πολύ μεγάλη ζημιά σε όποιον τους κάνει, γιατί βγαίνει κάρτα ότι το 'χει φυσικότερο πράγμα στον κόσμο να μιλάει κατηγορηματικά για πράγματα που δεν ξέρει.

 

Anyway το θέμα δεν είναι ο pointer γιατί το expression *w_count είναι τύπου unsigned και εκεί η αφαίρεση λειτουργεί "κανονικά". Η προταιραιότητα του dereference είναι μεγαλύτερη από της αφαίρεσης.

 

Hint #2: δεν είναι το λάθος στην τρίτη παράμετρο... είναι στις άλλες δύο.

Αν εννοεις να κανω τις 2 παραμετρους unsigned  το δοκιμασα κ δν δουλεψε, εχω ακριβως το ιδιο προβλημα.

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

Debugger; Ούτε καν;

 

Το θέμα θέλει ουσιαστικό ψάξιμο. Δεν είναι κουλοχέρης ώστε να τραβάς μία αλλαγή έτσι μπας και δουλέψει. "Άντε τα άλλαξα αυτά σε unsigned, αλλά δε δούλεψε". Τι ήθελες να πετύχεις με το να τα κάνεις unsigned; Δεν υπήρχε λόγος, λέω εγώ.

 

Hint: Αν το πας με αυτή τη σκέψη, σου λέω πως έχεις πάνω-κάτω ίδιες πιθανότητες να το κάνεις να δουλέψει, με αυτές που έχεις να κερδίσεις σε ένα παιχνίδι κουλοχέρη. Χάνεις χρόνο..

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

Αν εννοεις να κανω τις 2 παραμετρους unsigned  το δοκιμασα κ δν δουλεψε, εχω ακριβως το ιδιο προβλημα.

 

Έχεις μια μεταβλητή τύπου unsigned και θέλεις να κάνεις αλλαγές σ' αυτές μέσα σε μια function (w_count++) οι οποίες θέλεις να φαίνονται και απέξω, στον κώδικα που την καλέι. Γι' αυτό κάνεις την παράμετρο pointer to unsigned.

 

Έχεις και δύο μεταβλητές τύπου char** και θέλεις να κάνεις αλλαγές σ' αυτές μέσα σε μια function (realloc) οι οποίες θέλεις να φαίνονται και απέξω, στον κώδικα που την καλέι. Γι' αυτό θα έπρεπε να τις κάνεις pointer to char**, αλλά δεν το έκανες. Οπότε όταν επιστρέψεις στη main και ξανακαλέσεις τη function, οι En, Gr θα έχουν την πρώτη τιμή που πήραν (πάλι μέσα στη main). Και θα πας να κάνεις free (μέσω της realloc) κάτι που ήδη έχει γίνει free => πυροτεχνήματα.

 

Πρακτικά η ευκολότερη μπακαλολύση θα ήταν να κάνεις τις En, Gr global και να σταματήσεις να τις περνάς σαν παραμέτρους, οπότε δε θα μπλεκόσουν με char*** και θα έβλεπες από παντού τις σωστές τιμές. Αλλά μετά θα είχες "κακό κώδικα με globals".

 

Καλωσήρθες στο κόσμο της C, συλληπητήρια.  :-D

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

Έχεις μια μεταβλητή τύπου unsigned και θέλεις να κάνεις αλλαγές σ' αυτές μέσα σε μια function (w_count++) οι οποίες θέλεις να φαίνονται και απέξω, στον κώδικα που την καλέι. Γι' αυτό κάνεις την παράμετρο pointer to unsigned.

 

Έχεις και δύο μεταβλητές τύπου char** και θέλεις να κάνεις αλλαγές σ' αυτές μέσα σε μια function (realloc) οι οποίες θέλεις να φαίνονται και απέξω, στον κώδικα που την καλέι. Γι' αυτό θα έπρεπε να τις κάνεις pointer to char**, αλλά δεν το έκανες. Οπότε όταν επιστρέψεις στη main και ξανακαλέσεις τη function, οι En, Gr θα έχουν την πρώτη τιμή που πήραν (πάλι μέσα στη main). Και θα πας να κάνεις free (μέσω της realloc) κάτι που ήδη έχει γίνει free => πυροτεχνήματα.

 

Πρακτικά η ευκολότερη μπακαλολύση θα ήταν να κάνεις τις En, Gr global και να σταματήσεις να τις περνάς σαν παραμέτρους, οπότε δε θα μπλεκόσουν με char*** και θα έβλεπες από παντού τις σωστές τιμές. Αλλά μετά θα είχες "κακό κώδικα με globals".

 

Καλωσήρθες στο κόσμο της C, συλληπητήρια.  :-D

Ποοο! Τι inseption τρελο ειναι αυτο...! Αντε βγαλε ακρη.. Τεσπα ευχαριστω πολυ για τη βοηθεια! :-D

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

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

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