Title: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Nessa NetMonster on May 10, 2008, 18:09:42 pm Έλεος όμως... απλά έλεος...
Διαβάζω ένα ένα τα στοιχεία ενός πίνακα με floats. Έχω κάνει στην αρχή malloc για χώρο n*sizeof(float) όπου για n του δίνω κάτι δεκάδες χιλιάδες. Διαβάζει κανονικότατα τα πρώτα 11484 στοιχεία, διαβάζει λάθος τα στοιχεία 11485 και 11486, μετά πάλι κανονικά από όσο είδα, και κάπου μετά το στοιχείο 15600 περίπου μου βγάζει abnormal program termination null pointer exception WTF?? Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: SolidSNK on May 10, 2008, 18:13:31 pm Για θέμα μνήμης φαίνεται το πράγμα...
Σε κάποια στιγμή nessa θα πρέπει να μάθεις debugging δε γίνεται αλλιώς! Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Nessa NetMonster on May 10, 2008, 18:18:24 pm Ναι, είναι η πιο λογική υπόθεση... όμως δε μου βγάζει μήνυμα ότι δεν έγινε malloc! Του έχω βάλει έλεγχο να κάνει exit σε τέτοια περίπτωση.
Όταν προσπαθώ να δεσμεύσω χώρο για δύο τέτοιους πίνακες πράγματι μου βγάζει μήνυμα και τερματίζει το πρόγραμμα, αλλά για έναν δε βγάζει μήνυμα και συνεχίζει :???: Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: SolidSNK on May 10, 2008, 18:19:50 pm Για κάνε malloc για λιγότερα από 14κ στοιχεία και πες μας λίγο...
Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Γιώργος on May 10, 2008, 18:25:31 pm Ψάχνοντας λίγο λέει κάτι ψιλά εδώ (http://en.wikipedia.org/wiki/Pointer) (με key στο google = how can i avoid null pointer exception βρήκα κάτι άλλα, αλλά για Java).
Νομίζω μία φορά το 'χα δει κι εγώ. Κάτω απ' τη malloc συνήθως βάζω ένα τέτοιο block: Code: if(p==NULL) Τρέχω σε UNIX σε τέτοιες περιπτώσεις μνήμης γιατί βγάζει "καλά" error messages. Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Nessa NetMonster on May 10, 2008, 19:36:05 pm Για κάνε malloc για λιγότερα από 14κ στοιχεία και πες μας λίγο... Τώρα διαβάζει ό,τι να'ναι! :o Δεν καταλαβαίνω τίποταααααααα μπουχουχουουουουουουουουουουου :'( Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Γιώργος on May 10, 2008, 19:46:12 pm Θα 'ταν εύκολος ένας κώδικας (ή τμήμα του), έστω και σε pm, να τσεκάρουμε; :)
Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Verminoz on May 10, 2008, 19:47:38 pm δώσε κώδικα και κανά sample από το αρχείο με τα στοιχεία
Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Nessa NetMonster on May 10, 2008, 19:51:29 pm Για κάνε malloc για λιγότερα από 14κ στοιχεία και πες μας λίγο... Τώρα διαβάζει ό,τι να'ναι! :o Δεν καταλαβαίνω τίποταααααααα μπουχουχουουουουουουουουουουου :'( Άκυρο, γκάφα στην εκτύπωση :-X Μια χαρά τα διαβάζει όταν είναι 10000. Μόνο που μετά δε μπορεί να κάνει malloc για δεύτερο πίνακα. ΟΚ λοιπόν, με το δεδομένο ότι ο compiler τα παίζει με μεγάλους πίνακες, τι μπορώ να κάνω; Αν αλλάξω complier υπάρχει περίπτωση να λυθεί το πρόβλημα; Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Nessa NetMonster on May 10, 2008, 19:59:37 pm Έλεος όμως... απλά έλεος... Διαβάζω ένα ένα τα στοιχεία ενός πίνακα με floats. Έχω κάνει στην αρχή malloc για χώρο n*sizeof(float) όπου για n του δίνω κάτι δεκάδες χιλιάδες. Διαβάζει κανονικότατα τα πρώτα 11484 στοιχεία, διαβάζει λάθος τα στοιχεία 11485 και 11486, μετά πάλι κανονικά από όσο είδα, και κάπου μετά το στοιχείο 15600 περίπου μου βγάζει abnormal program termination null pointer exception WTF?? Στον Borland C δε μου βγάζει αυτό το πρόβλημα. Όμως και πάλι δεν έχει αρκετή μνήμη για δεύτερο πίνακα. Ξέρετε κανέναν άλλον; :-\ Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Verminoz on May 10, 2008, 20:02:06 pm Μπορείς να δοκιμάσεις αντί για malloc τον τελεστή new. Ίσως τα καταφέρει καλυτερα. Για compiler προτείνω gcc (mingw σε windows). περιλαμβάνεται με το Dev-C++.
Διαφορετικά μπορείς να χρησιμοποιήσεις από την STL βιβλιοθήκη της C++ την vector.h.Ρίξε μια ματιά. Ενδεχομένως να μπορέσει να διαχειριστεί καλύτερα των όγκο των δεδομένων. http://www.cppreference.com/cppvector/index.html Το αντικείμενο δηλώνεται έτσι: vector<float> pinakas; ή διδιάστατο: vector< vector<float> > pinakas; προσθέτεις στοιχεία με την μέθοδο push_back(...) και άλλες πολλές λειτουργίες. Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: marauber on May 10, 2008, 20:31:13 pm Αυτό θα πρότεινα και εγώ. Δε γίνεται εν έτει 2008 να προγραμματίζεις C σε Borland compiler! Αυτά τα κάνανε πριν 15 χρόνια.
Ξεχνάς malloc, printf και scanf και όλα τα προβλήματα που συνεπάγονται. Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Nessa NetMonster on May 10, 2008, 22:31:10 pm Και με τον dev μου βγάζει μήνυμα λάθους. ::)
Η new λογικά είναι καινούρια εντολή, στο βιβλίο μου δεν την έχει... θα την ψάξω. Ευχαριστώ! Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: SolidSNK on May 11, 2008, 17:05:07 pm Συμβουλή δική μου μη πάς στη C++ αλλά κάτσε στη C... και έχω αρκετούς λόγους που το λέω.
Ακόμα, στο επίπεδο που προγραμματίζεις, τα λάθη στη μνήμη είναι συχνά και μερικές φορές δεν είναι προβλέψιμα. Καθαρά από ένστικτο, δίχως να έχω δει το κώδικα σου, έχω την εντύπωση σε οποιοδήποτε unixοειδές λειτουργικό δε θα είχες τέτοια προβλήματα! Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: marauber on May 11, 2008, 20:05:41 pm Συμβουλή δική μου μη πάς στη C++ αλλά κάτσε στη C... και έχω αρκετούς λόγους που το λέω. Εγώ προσωπικά δε μπορώ να σκεφτώ κανέναν. Από τότε που άρχισα να μαθαίνω C++, μου φάνηκε εντελώς περιττό που στη σχολή ξεκινήσαμε από C αντί να μας διδάσκουν κατευθείαν C++. Δεν εννοώ βέβαια να μπουν με τη μια στα βαθιά του αντικειμενοστραφούς προγραμματισμού, αλλά κάποια πράγματα είναι κατά τη γνώμη μου εντελώς περιττά. Εκτός των άλλων, είναι και θέμα εκσυχρονισμού. Αλλά τι λέω, εδώ στο 1ο εξάμηνο σε μας (εν έτει 2002-03) μας δίδασκαν Fortran :o :-X :o Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Γιώργος on May 11, 2008, 20:14:59 pm Ενώ στην Αθήνα διδάσκεται ακόμα Pascal 1ο εξάμηνο. Ε, ρε γλέντια! :D
Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Nessa NetMonster on May 11, 2008, 20:34:05 pm Γιατί ρε; Η Pascal έχει μεγάλη εκπαιδευτική αξία!
Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Γιώργος on May 11, 2008, 20:40:45 pm Γιατί ρε; Η Pascal έχει μεγάλη εκπαιδευτική αξία! Δεν διαφωνώ στο ότι μαθαίνεται σχετικά εύκολα. Απλά... για ΗΜΜΥ θεωρώ ότι πρέπει με C να ξεκινάει κανείς.Τεσπα, καλά να 'μαστε πάνω απ' όλα. :) Title: Re: Πάλι για διάβασμα από αρχείο με τη C (για πίνακα) Post by: Nessa NetMonster on May 16, 2008, 16:35:58 pm Κάτι παράξενα πράγματα...
Όταν κάνω malloc δε μου βγάζει NULL στον pointer (κι ας μην έγινε η malloc) ενώ όταν κάνω calloc με το ίδιο μέγεθος μου βγάζει NULL (σωστά, γιατί δεν έχει αρκετή μνήμη). Ανεξήγητο! ^idiot^ |