Segmentation fault (core dumped) [C++]

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Segmentation fault (core dumped) [C++]

Δημοσίευσηαπό c7p » 18 Νοέμ 2012, 14:49

Έχω γράψει αυτόν τον κώδικα και όταν πάω να τον τρέξω μου βγάζει "Segmentation fault (core dumped)". Έψαξα στο internet και κατάλαβα περί τίνος πρόκειται το πρόβλημα. Παρατήρησα ότι αν άλλαζα τα μέλη τις κλάσης από string σε int τότε δεν υπήρχε πρόβλημα, ωστόσο τα μέλη της κλάσης θέλω να είναι string ! Μια λογική είναι ότι τα strings δεν έχουν στάνταρ μέγεθος ωστόσο δεν βρήκα και κάποια εντολή κατά την δήλωση που να μου τα περιορίζει σε μέγεθος...
Καμιά ιδέα ;

Κώδικας: Επιλογή όλων
#include <stdlib.h>
#include <malloc.h>
#include <iostream>

using namespace std;

class voter{
    private:
        string name ;
        string id  ;
    public:
        voter() ;
        string getid(void) {return id; }
} ;

voter::voter(){
    cout << "Όνομα ψηφοφόρου: " ;
    cin >> name ;
    cout << "Κωδικός: " ;
    cin >> id ;
}

int main(){

    voter * v ;
    int Voters ;

    cout << "Αριθμός ψηφοφόρων:  " ;
    cin >> Voters ;


    //πίνακας ψηφοφόρων
    v = (voter *) malloc(Voters*sizeof(voter)) ;
    if(  v == NULL ){
        cout << "Έλλειψη μνήμης (πίνακας ψηφοφόρων)" ;
        exit(2) ;
    }
   
    voter vava ;
    v[0] = vava ;

return 1 ;

}



Ευχαριστώ ! :)
Άβαταρ μέλους
c7p
powerTUX
powerTUX
 
Δημοσιεύσεις: 1849
Εγγραφή: 30 Μάιος 2009, 16:09
Τοποθεσία: Κατερίνη
Εκτύπωση

Re: Segmentation fault (core dumped) [C++]

Δημοσίευσηαπό simosx » 18 Νοέμ 2012, 21:29

Κατά Linus Torvalds, είναι καλό να δεις ξανά και ξανά τον κώδικα για να εντοπίσεις που είναι το σφάλμα.
Ωστόσο μπορείς να χρησιμοποιήσεις τις εντολές εκσφαλμάτωσης για να δεις ποια εντολή έχει πρόβλημα,

(gdb) where
#0 0x00007f45b75ac4ef in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#1 0x00007f45b75ad916 in std::string::assign(std::string const&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#2 0x0000000000400d37 in voter::operator= (this=0xf44010) at t.cc:7
#3 0x0000000000400c3e in main () at t.cc:40
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Segmentation fault (core dumped) [C++]

Δημοσίευσηαπό simosx » 18 Νοέμ 2012, 21:31

Είδα και τον κώδικα. Το πρώτο που προτείνω είναι να αντικαταστήσεις τη malloc() με την εντολή new. Σε C++ είναι πανεύκολο να κάνεις σφάλμα όταν χρησιμοποιείς malloc() για την εκχώρηση μνήμης, και ίσως και σε g++ να είναι προβληματικό να αναμιγνύεις malloc() με αντικείμενα.
Κάνοντας την αλλαγή αυτή μάλλον το πρόβλημα θα διορθωθεί.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση


Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι