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

Stack overflow in your program's main thread


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

Δημοσ.
  Στις 18/5/2014 στις 9:21 ΜΜ, kal03 είπε

...

θέλω να εισάγω στοιχεια σε μια στοιβα...

και μετα να τα "παω" αυτά σε μια άλλη κενή..(αυτή ειναι η βασική ιδέα)

...

 

Προσάρμοσέ το...

 

Κώδικας

 

  Εμφάνιση κρυμμένου περιεχομένου

 

  • Like 1
  • Απαντ. 57
  • Δημ.
  • Τελ. απάντηση

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

Δημοφιλείς Ημέρες

Δημοσ.
  Στις 18/5/2014 στις 8:42 ΜΜ, kal03 είπε

συναρτηση:

int rV(FILE * fp,TS *Elem){

return fscanf(from,"%d",Elem);

}

 

κληση 

if(!yperxeilisi) //to exw orisei se prohgoumenes grammes

      rV(from,Stoix);

 

to from einai orismeno san FILE *

kai to Stoix san TS * to opoio to ekana me typedef ...kai ousiastika einai int

Εφόσον έχεις δηλώσει ένα όρισμα fp και καλείς κιόλας την συνάρτηση ως rV(from,) τότε μέσα στην συνάρτηση έπρεπε να χρησιμοποιείς το fp. Επίσης το from πως το βλέπει η rV ? Είναι δηλωμένο globally ? Πέρα από αυτό, αν δεν έχεις σκοπό σε μετέπειτα στάδιο να εμπλουτίσεις την συνάρτηση, δεν έχει κάποιο νόημα έτσι όπως είναι. Κάλεσε κατευθείαν την fscanf από το if σου.

 

Επίσης, αν δεν σε αναγκάζει να χρησιμοποιείς typedefs η άσκηση, τότε απόφυγε τα. Το "TS *Elem" δεν προσφέρει τίποτα σε σχέση με το "int *Elem" και δυσκολεύει μάλιστα τον αναγνώστη αντί να τον ευκολύνει.

 

Τα παραπάνω βέβαια είναι γενικές συμβουλές και δεν έχουν σχέση με το λάθος που έχεις. Όσον αφορά εκείνο, το WinRAR υποστηρίζει κρυπτογράφηση. Έτσι δεν θα μπορούν συμφοιτητές σου να δουν τον κώδικά σου. Συμπίεσε τον κώδικά σου μαζί με όλα τα αρχεία εισόδου που χρησιμοποιείς και ανέβασε το αρχείο εδώ. Έπειτα στείλε με προσωπικό μήνυμα τον κωδικό σε όποιον θέλεις από τα παιδιά που συμμετέχουμε. Δεν είναι το ίδιο με το να τον ανεβάσεις χύμα εδώ ώστε να μπορούν να συμμετέχουν όλοι αλλά ίσως έτσι μπορέσει να βγάλει άκρη αυτός και σε βοηθήσει.

  • Like 1
Δημοσ.

Πάντως να ξέρεις ότι αν προσπαθήσεις να απομονώσεις ένα minimum example το οποίο εμφανίζει το πρόβλημα που σου παρουσιάζεται, πιθανά θα μπορέσεις και να το λύσεις.

 

Διάβασε εδώ για τα minimum working examples. Αναφέρεται σε LaTeX αλλά δεν αλλάζει κάτι όσον αφορά το σκοπό και τη χρησιμότητά του.

Δημοσ.

Η μαντεψιά μου είναι πως το TS σημαίνει "Top of Stack" αλλά δεν μπορώ να ξέρω αν αναφέρεται σε κόμβο ή στο data field του κόμβου. Ανάλογα με το που αναφέρεται, αλλάζει και η υλοποίηση.

 

Επίσης, επειδή η φίλη μας λέει πως έκανε typedef int TS; υποθέτω πως τους έχει δοθεί κάποιου είδους ημι-generic stack implementation βασισμένο στο TS, και τους έχουν πει να κάνουν typedef το TS σε όποιον τύπο δεδομένων θέλουν να διαχειρίζονται με την στοίβα (σε int αυτή την περίπτωση).

 

Χωρίς περαιτέρω πληροφορίες είναι αδύνατον να ξέρουμε τι γίνεται. Συν ότι μια στοίβα μπορεί να οριστεί με παραπάνω του ενός τρόπου. Αν πάντως το TS αναφέρεται στον τύπο του data-field του κόμβου και όχι στον ίδιον τον κόμβο, τότε μια πιθανή ημι-generic υλοποίηση βασισμένη στον κώδικα του προηγούμενου ποστ μου που δουλεύει μονάχα με primitive τύπους (με γνωστό δηλαδή size) θα μπορούσε να είναι κάπως έτσι...

 

Κώδικας (stack.h - αντί για TS έχω Data)

 

  Εμφάνιση κρυμμένου περιεχομένου

 

Κώδικας (stack.c)

 

  Εμφάνιση κρυμμένου περιεχομένου

 

Αλλάζοντας στο stack.h το typedef του Data, θα πρέπει να αλλαχτεί αντίστοιχα και η τιμή του POP_SENTINEL (είναι η τιμή που θέλουμε να επιστρέφει η stack_pop() όταν η στοίβα είναι άδεια).

 

Επίσης, η stack_print() παίρνει ως τελευταίο όρισμα ένα δείκτη στη συνάρτηση εκτύπωσης του εκάστοτε Data (και που προφανώς την ορίζουμε στο κεντρικό πηγαίο αρχείο).

 

Οπότε, το κεντρικό πηγαίο αρχείο που διαβάζει ένα αρχείο από ints σε μια στοίβα και μετά τους μεταφέρει σε μια δεύτερη (μάλλον επειδή το ζητούμενο είναι να αντιστραφεί η σειρά τους) θα μπορούσε να είναι κάπως έτσι...

 

Κώδικας (test.c)

 

  Εμφάνιση κρυμμένου περιεχομένου

 

gcc stack.c test.c
ΥΓ1. Αν το TS αναφέρεται στον κόμβο (και όχι στο data-field του) τότε χρειάζεται να ξέρουμε κι άλλες πληροφορίες από την εκφώνηση.

 

ΥΓ2. Για πραγματικά generic υλοποίηση στοίβας, ένα ενδεχόμενο είναι να χρησιμοποιηθεί void * αντί για Data, αλλά εκεί θα πρέπει να αντικατασταθούν αρκετά = με memcpy(), καθώς και να περνιέται ως όρισμα και το μέγεθος του εκάστοτε τύπου (βασικά, αλλάζει όλη η υλοποίηση). Ένα άλλο ενδεχόμενο generic υλοποίησης είναι να γίνουν όλα στον προεπεξεργαστή.

 

EDIT:

 

  Στις 19/5/2014 στις 5:41 ΠΜ, imitheos είπε

Εφόσον έχεις δηλώσει ένα όρισμα fp και καλείς κιόλας την συνάρτηση ως rV(from,) τότε μέσα στην συνάρτηση έπρεπε να χρησιμοποιείς το fp. Επίσης το from πως το βλέπει η rV ? Είναι δηλωμένο globally ?

...

Σωστός, τόσοι νοματαίοι χτες βράδυ, κανείς μας δεν το πρόσεξε αυτό!

 

  Αναφορά σε κείμενο

...

Όσον αφορά εκείνο, το WinRAR υποστηρίζει κρυπτογράφηση. Έτσι δεν θα μπορούν συμφοιτητές σου να δουν τον κώδικά σου. Συμπίεσε τον κώδικά σου μαζί με όλα τα αρχεία εισόδου που χρησιμοποιείς και ανέβασε το αρχείο εδώ. Έπειτα στείλε με προσωπικό μήνυμα τον κωδικό σε όποιον θέλεις από τα παιδιά που συμμετέχουμε. Δεν είναι το ίδιο με το να τον ανεβάσεις χύμα εδώ ώστε να μπορούν να συμμετέχουν όλοι αλλά ίσως έτσι μπορέσει να βγάλει άκρη αυτός και σε βοηθήσει.

Κατά τη δική μου άποψη αυτό, παρότι θεμιτό, δεν συνάδει με το γενικότερο κλίμα ενός δημόσιου φόρουμ. Μπορεί να είναι δικιά μου παραξενιά, αλλά προσωπικά ενοχλούμαι όταν μου στέλνουν p.m. για τέτοιες περιπτώσεις. Συνήθως τους προτρέπω να το ποστάρουν δημόσια, ώστε και πιο γρήγορα ενδεχομένως να βρεθεί λύση και να επωφεληθούν και όσοι άλλοι έχουν το ίδιο πρόβλημα. Το καλύτερο από όλα, imho, είναι αυτό που είπε ο pmav99... να απομονώσουν το πρόβλημα και να το ποστάρουν.

Δημοσ.
  Στις 19/5/2014 στις 9:44 ΠΜ, migf1 είπε
Κατά τη δική μου άποψη αυτό, παρότι θεμιτό, δεν συνάδει με το γενικότερο κλίμα ενός δημόσιου φόρουμ. Μπορεί να είναι δικιά μου παραξενιά, αλλά προσωπικά ενοχλούμαι όταν μου στέλνουν p.m. για τέτοιες περιπτώσεις. Συνήθως τους προτρέπω να το ποστάρουν δημόσια, ώστε και πιο γρήγορα ενδεχομένως να βρεθεί λύση και να επωφεληθούν και όσοι άλλοι έχουν το ίδιο πρόβλημα. Το καλύτερο από όλα, imho, είναι αυτό που είπε ο pmav99... να απομονώσουν το πρόβλημα και να το ποστάρουν.

 

 

Είναι και δική μου παραξενιά.

Και ώρες-ώρες το κακό με τα pm παραγίνεται...

Κι άντε να αποδείξεις ότι θέλεις μεν να βοηθήσεις, απλά όχι έτσι.

  • Like 2
Δημοσ.

Παιδιά τρέχει...πρόβλημα στην μνήμη ήταν τελικά!
διορθώθηκε!

Ευχαριστώ πολύ για τις συμβουλές
και συγγνώμη για την όποια αναστάτωση!  :-D

Δημοσ.

 

  Εμφάνιση κρυμμένου περιεχομένου

 

  • Like 3
Δημοσ.
  Στις 19/5/2014 στις 12:32 ΜΜ, thanos713 είπε

 

  Εμφάνιση κρυμμένου περιεχομένου

 

 Καταρήφθηκε (με 6 σελίδες).

  • Like 1
Δημοσ.
  Στις 19/5/2014 στις 12:32 ΜΜ, thanos713 είπε

 

  Εμφάνιση κρυμμένου περιεχομένου

 

Οτι εχει να κανει με απλουστατη c, γινεται hot.

  • Like 2
Δημοσ.
  Στις 19/5/2014 στις 12:32 ΜΜ, thanos713 είπε

Θέλω να κάνουμε ένα κοινωνικό πείραμα. Να φτιάξει η kal03, με άλλο username, νέο thread και να πει ότι είναι άντρας. Αν πιάσει τις 2 σελίδες το thread, γίνομαι ιερέας. :3

Γρήγορα να πας να γραφτείς για ιερέας :P

 

  Στις 19/5/2014 στις 1:26 ΜΜ, παπι είπε

Οτι εχει να κανει με απλουστατη c, γινεται hot.

Κατ' εμέ δεν είναι τόσο ότι είναι η kal03 είναι γυναίκα (που προσωπικά το username kal03 δεν μου δίνει να καταλάβω κάποιο φύλο) αλλά είναι αυτό που είπε ο παπί ότι ήταν εύκολη ερώτηση. Και λογικό δεν είναι ? Σε ποιο νήμα θα απαντήσει περισσότερος κόσμος ? Σε αυτό που είναι εύκολο και το γνωρίζουν 7000 άτομα ή σε κάποιο που πρέπει να πρηχτείς και να χάσεις τη μισή μέρα σου για να απαντήσεις ?

Δημοσ.

Θέλω να ζητήσω δημόσια συγγνώμη από όλα τα μέλη του φόρουμ που ασχολήθηκαν με το παρόν θέμα και τον Ιούλιο στο μηχανογραφικό μου θα δηλώσω ως πρώτη επιλογή Link.png Site: αυτή την σχολή. 

Δημοσ.

 

  Εμφάνιση κρυμμένου περιεχομένου

 

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

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

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

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

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

Σύνδεση

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

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