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

C++ Segmentation fault & περίεργο warning


Apanepai

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

Δημοσ.

Καλησπέρα παιδιά,

υπάρχει το εξής πρόβλημα.

Έχω γράψει τον εξής κώδικα:

struct message{

char* message_tittle;

char* message_publ;

char* message_index;

};

 

Έπειτα μέσα στη main πάω δημιουργήσω ένα στιγμιότυπο της δομής και να δόση τιμές.

Στην πρώτη περίπτωση όπου έχω στον κώδικα της main:

message *message1 = new message;

message1->message_tittle="test";

cout<<topic1->tomessage->message_tittle<<endl;

 

Όταν το παραπάνω το κάνω compile σε περιβάλλον windows με το Dev-C++ δεν υπάρχει κανένα απολύτος πρόβλημα. Το θέμα είναι ότι πρόκειται για project σχολής και πρέπει να το τρέξω σε unix για να δω εαν είναι όλα οκ. Το τρέψω λοιπόν και σε ubuntu και χρησιμοποιώ τον c++ compiler και μου πετάει warning (warning: deprecated conversion from string constant to ʽchar*ʼ) όταν δίνω τιμή στον δείκτη message_tittle.

 

Επίσης σαν λύση σκέφτηκα να χρησιμοποιήσω την strcpy οπότε γράφω το εξής για να δώσω τιμή στον δείκτη:

strcpy(message1->message_tittle,"test");

 

Πάλι μέσω Dev-C++ ουδέν πρόβλημα ενώ στο linux μου χτυπάει Segmentation fault και δεν κάνει compile.

 

Τι γίνεται εδώ ρε παιδιά γιατί ομολογό ότι μπερδεύτικα στα απλά?

Δημοσ.

Δοκίμασε να κάνεις, εκτός από new struct και new στα char * (πχ. message1->message_tittle = new char[20]) διότι διαφορετικά δοκιμάζεις να γράψεις σε τυχαίες θέσεις στην μνήμη της διεργασίας σου αφού το char* από μόνο του είναι ένας pointer προς κάπου, που ακόμα δεν έχεις ορίσει με αποτέλεσμα το segmentation fault λόγο strcpy -ούτε στα Windows δουλεύει σωστά, απλά δεν φαίνεται, μετά από μερικούς κύκλους εκτέλεσης θα σπάσει και σε αυτά.

 

Υ.Γ.

Για το deprecated conversion from string constant to ʽchar*ʼ warning δεν μπορώ να σε βοηθήσω διότι δεν χρησιμοποιώ gcc, μπορεί μια αναζήτηση με αυτό το warning όμως στο Google να σε διαφωτίσει. Για περισσότερα εδώ: http://babbage.cs.qc.edu/courses/cs701/Writeable_Strings.html..

Αρχειοθετημένο

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

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