Γεια σας, έχω τον εξής κώδικα:
Μετά το cin >> inp; μου πετάει segmentation fault. Το compile γίνεται χωρίς σφάλματα, σε KDevelop (Kubuntu 8.04). Τι μπορεί να φταίει; Ώς αρχικές δηλώσεις του προγράμματος έχω τις εξής:Κώδικας:void NewDoc() { system("clear"); // Εκκαθάριση οθόνης cout << "Εισαγωγή γιατρού\n--------------------\n" << endl; cout << "Όνομα: "; string inp; cin >> inp; int i=0; while (Doctors[i]!=NULL) {if (!Doctors[i]->name.compare(inp)) {cout << "Υπάρχει ήδη γιατρός με όνομα """ << inp << """. Δεν γίνεται εισαγωγή"; sleep(2000); menu();} else i++; } i=0; while (Doctors[i]!=NULL) {i++;} Doctors[i] = new Doc; Doctors[i]->name = inp; if (!Doctors[i]->name.compare(inp)) {cout << "Η εισαγωγή ολοκληρώθηκε."; sleep(2000); menu();} else {cout << "Η εισαγωγή δεν ολοκληρώθηκε."; sleep(2000); NewDoc();} }
Ο υπόλοιπος κώδικας ίσως είναι λίγο μπακαλίστικος, αλλά αυτή τη στιγμή με διαολίζει αυτό το segfault.Κώδικας:#include <iostream> using namespace std;
Ευχαριστώ εκ των προτέρων για κάθε βοήθεια
Εμφάνιση 1-13 από 13
-
29-06-08, 21:48 Segmentation fault σε C++ σε Linux με string cin #1
Τελευταία επεξεργασία από το μέλος Simpleton : 29-06-08 στις 23:23.
- Κάνετε τη δουλειά σας γρήγορα, αξιόπιστα, με ασφάλεια, χωρίς τεχνητούς περιορισμούς και δωρεάν με το Linux.
- Οι δίσκοι χαλάνε! Σκεφτείτε τα αρχεία σας πριν την πατήσετε. Κάνετε τακτικά backup.
-
30-06-08, 11:42 Απάντηση: Segmentation fault σε C++ σε Linux με string cin #2
Καλημέρα,
Σου πετάει ακριβώς μετά το "cin >> inp" ή απλά κάπου μετά; Τρέξε το σε έναν debugger ή βάλε cout μετά από κάθε εντολή να δείς που ακριβώς έχει πρόβλημα (πχ Doctors != NULL).
Το έτρεξα ως και το "cin >> inp" και δεν παρουσίασε πρόβλημα...
-
30-06-08, 16:50 Απάντηση: Segmentation fault σε C++ σε Linux με string cin #3
Ευχαριστώ για την απάντηση
Εχτές μου το πέταγε αμέσως μόλις γράψω κάτι και πατήσω Enter στο prompt του "cin >> inp".
Σήμερα που το δοκίμασα πάλι, δεχόταν ό,τι έγραφα στο prompt, αλλά μετά δεν έκανε τίποτα. Ένα
Κώδικας:cout << "OK";
Τροποποίησα την ενότητα ως εξής:
Κώδικας:void NewDoc() { system("clear"); // Εκκαθάριση οθόνης cout << "Εισαγωγή γιατρού\n--------------------\n" << endl; cout << "Όνομα: "; string inp; cin >> inp; cout << inp; }
Τα αντικείμενα string δεν χρειάζονται κάποια αρχικοποίηση, έτσι;- Κάνετε τη δουλειά σας γρήγορα, αξιόπιστα, με ασφάλεια, χωρίς τεχνητούς περιορισμούς και δωρεάν με το Linux.
- Οι δίσκοι χαλάνε! Σκεφτείτε τα αρχεία σας πριν την πατήσετε. Κάνετε τακτικά backup.
-
30-06-08, 17:16 Απάντηση: Segmentation fault σε C++ σε Linux με string cin #4
Φίλε skaf το πρόβλημά σου είναι εδώ:
Κώδικας:while (Doctors[i]!=NULL) {if (!Doctors[i]->name.compare(inp)) {cout << "Υπάρχει ήδη γιατρός με όνομα """ << inp << """. Δεν γίνεται εισαγωγή"; sleep(2000); menu();} else i++; }
Επιπλέον 99% χρησιμοποιείς με λάθος τρόπο την έξοδο "menu()": Η NewDoc() δεν επιστρέφει ποτέ, αλλά καλεί μιαν άλλη συνάρτηση. Αν κληθεί αρκούντως πολλές φορές θα μπουκώσει η στοίβα (stack). Εδώ αυτό δεν πρόκειται να γίνει, αλλά αν δεν το ξέρεις θα το κάνεις και αλλού. Πιο σωστό θα ήταν κάτι του στύλ:
Κώδικας:int entryValidates = 1; while (Doctors[i]!=NULL && i < lengthOfDoctorsArray) { if (!Doctors[i]->name.compare(inp)) { cout << "Υπάρχει ήδη γιατρός με όνομα """ << inp << """. Δεν γίνεται εισαγωγή"; sleep(2000); entryValidates = 0; break; } i++; } if( !entryValidates ) { return -1; }
Αλλά γιατί δεν τύπωνε το ΟΚ;;; Κλασικό: Τα standard streams είναι buffered, δηλαδή δε γράφουν αμέσως αυτό που τους δίνεις στην έξοδό τους. Όταν λοιπόν πεταγόταν το segfault, το "ΟΚ" ήταν στο buffer και δεν είχε προλάβει να πάει στην οθόνη. Το πρόγραμμα τερμάτιζε βεβιασμένα και οι buffers πετάγονταν, με αποτέλεσμα το μήνυμα να χάνεται. Θα το έβλεπες αν είχες κάνει κάτι του στύλ: "cout << inp; cout.flush();"
Καλή συνέχεια
-
30-06-08, 17:46 Απάντηση: Segmentation fault σε C++ σε Linux με string cin #5
Για να μην παραθέτω επιλεκτικά και ψαχνόμαστε, ιδού ολόκληρος ο κώδικας του προγράμματος:
Spoiler:
Όπως βλέπεις, στην main αρχικοποιώ τον πίνακα δεικτών Doctors. Με την λογική (; ) μου, την πρώτη φορά που θα έκανα εισαγωγή ονόματος, δεν θα έμπαινε σε κανέναν από τους δύο βρόχους while, καθώς όλοι οι δείκτες θα ήταν NULL.
Όσο για την άτσαλη έξοδο από την NewDoc(), το ξέρω, άλλα έκανα αρχικά ένα πρόχειρο πρόγραμμα και σε αργότερο στάδιο φυσικα και θα το άλλαζα. Εκτός αν υπάρχει ενδεχόμενο να φταίει κι αυτό για την cin που δεν λειτουργεί.
Εννοείται ότι σε ευχαριστώ πολύ που ασχολήθηκες με το πρόβλημα μουΤελευταία επεξεργασία από το μέλος Simpleton : 30-06-08 στις 18:12.
- Κάνετε τη δουλειά σας γρήγορα, αξιόπιστα, με ασφάλεια, χωρίς τεχνητούς περιορισμούς και δωρεάν με το Linux.
- Οι δίσκοι χαλάνε! Σκεφτείτε τα αρχεία σας πριν την πατήσετε. Κάνετε τακτικά backup.
-
30-06-08, 17:58 Απάντηση: Segmentation fault σε C++ σε Linux με string cin #6
Συγγνώμη, αλλα γιατι δεν το περνάς από τον debugger για να σου πει ακριβώς το πρόβλημα?
*Doctors[100]
Μήπως εννοούσες χωρίς το * ?
-
30-06-08, 18:21 Απάντηση: Segmentation fault σε C++ σε Linux με string cin #7- Κάνετε τη δουλειά σας γρήγορα, αξιόπιστα, με ασφάλεια, χωρίς τεχνητούς περιορισμούς και δωρεάν με το Linux.
- Οι δίσκοι χαλάνε! Σκεφτείτε τα αρχεία σας πριν την πατήσετε. Κάνετε τακτικά backup.
-
30-06-08, 18:32 Απάντηση: Segmentation fault σε C++ σε Linux με string cin #8
skaf αυτό που έστειλες μου δουλεύει, με μια μετατροπή: το όρισμα της sleep() είναι σε δευτερόλεπτα, οπότε το 2000 είναι κανα 40λεπτο
Κάντο σκέτο 2 για 2 δευτερόπλεπτα που μάλλον θές...
Πάντως segfault δεν κάνει με 2 εισαγωγές.
-
30-06-08, 18:38 Απάντηση: Segmentation fault σε C++ σε Linux με string cin #9
1. Το βασικότερο είναι να χειρίζεσαι το debugger. Το debugging είναι στα πρωτα 10 βήματα στον προγραμματισμό και ειδικά σε ένα δύσκολο περιβάλλον σαν το Linux. Κάτσε και ψάξε ολα τα κόλπα που έχει ο debugger σου, το εννοώ όταν λέω όλα.
2. Οχι δεν είναι λάθος, αλλά σήμερα τέτοιας μορφής κώδικας θεωρείται επικίνδυνος και απαρχαιωμένος. Καλύτερα να χρησιμοποιήσεις std::vector. Εαν ακόμα δεν ξέρεις από STL, διάβασε και χρησιμοποίησέ τη.
3. Ο κώδικάς σου στα Windows δεν crasharei και επομένως δεν μπορώ να σε βοηθήσω περισσότερο από τον debugger σου. Γενικά πάντως ο G++ , ενώ είναι καλός C compiler, δεν είναι αξιόπιστος C++ compiler.
-
30-06-08, 19:30 Απάντηση: Segmentation fault σε C++ σε Linux με string cin #10
ΟΚ, το γεγονός ότι δεν κρασάρει σε άλλη πλατφόρμα είναι πολύ θετικό. Οπότε έχει τώρα να πέσει γερό διάβασμα για debugging και STL...
Ευχαριστώ και πάλι όλους που ασχοληθήκατε με την περίπτωση μου- Κάνετε τη δουλειά σας γρήγορα, αξιόπιστα, με ασφάλεια, χωρίς τεχνητούς περιορισμούς και δωρεάν με το Linux.
- Οι δίσκοι χαλάνε! Σκεφτείτε τα αρχεία σας πριν την πατήσετε. Κάνετε τακτικά backup.
-
30-06-08, 21:27 Απάντηση: Segmentation fault σε C++ σε Linux με string cin #11
Καθόλου θετικό δεν είναι.
Δείχνει οτι ο compiler έχει πρόβλημα.
Αντιθέτως αμα κράσαρε και στα Windows θα σου λέγαμε και τον λόγο.
Και μια τελευταία συμβουλή. Υποψιαζομαι οτι τον κωδικα αυτόν δεν τον έγραψες εσύ ολόκληρο. Μην χρησιμοποιείς κώδικα άλλου χωρίς να έχεις μάθει τη γλώσσα τέλεια.Τελευταία επεξεργασία από το μέλος turboirc : 30-06-08 στις 21:38.
-
30-06-08, 21:40 Απάντηση: Segmentation fault σε C++ σε Linux με string cin #12- Κάνετε τη δουλειά σας γρήγορα, αξιόπιστα, με ασφάλεια, χωρίς τεχνητούς περιορισμούς και δωρεάν με το Linux.
- Οι δίσκοι χαλάνε! Σκεφτείτε τα αρχεία σας πριν την πατήσετε. Κάνετε τακτικά backup.
-
30-06-08, 21:41 Απάντηση: Segmentation fault σε C++ σε Linux με string cin #13
Σε αυτήν την περίπτωση έχεις προχωρήσει πολύ σε ασκήσεις, πιο γρήγορα από ότι έπρεπε.
Συνεχισε το διάβασμα και, κατα την γνώμη μου, δούλεψε με το Visual Studio.
Παρόμοια Θέματα
-
Segmentation fault σε C pointers
Από artem στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμούΜηνύματα: 11Τελευταίο Μήνυμα: 02-04-08, 23:38 -
Mplayer segmentation fault
Από adminis στο φόρουμ Unix - LinuxΜηνύματα: 6Τελευταίο Μήνυμα: 07-05-06, 21:29 -
Gentoo compilation -->Segmentation fault
Από yiapap στο φόρουμ Unix - LinuxΜηνύματα: 21Τελευταίο Μήνυμα: 06-02-06, 19:16 -
gcc segmentation fault σε FreeBSD
Από teacake στο φόρουμ Unix - LinuxΜηνύματα: 2Τελευταίο Μήνυμα: 28-01-06, 12:48 -
firefox segmentation fault
Από Rama στο φόρουμ WindowsΜηνύματα: 4Τελευταίο Μήνυμα: 25-12-05, 11:32
Bookmarks