2015-08-23 4 views
-1

У меня есть эта простая функцияПочему установка const char * дает ошибку сегментации?

struct MyException : public exception 
{ 
    const char *errorMessage = NULL; 

    void SetMessage(const char* message) 
    { 
     errorMessage = message; 
    } 

    const char * what() const throw() 
    { 
    return errorMessage; 
    } 
}; 
struct MyException *socketException; 

и когда я называю

socketException->SetMessage("socket connection error"); 
     throw *socketException; 

Я получаю ошибку сегментации прямо на линии, где я устанавливаю сообщение для ErrorMessage. Мне не хватает чего-то очень фундаментального, но я не мог понять это. Я проверил другие вопросы об ошибке сегментации, и я знаю, что это иногда связано с неправильным использованием указателей. Но я до сих пор этого не понимаю.

+2

Вы делаете что-то другое, то, что вы не показывают нам, чтобы вызвать аварию. –

+0

Этот код [работает] (http://rextester.com/WMIY66402). Проблема должна быть где-то в коде, который вы не показывали. –

+0

@ DOUGLASO.MOEN Нет, OP пытается переназначить указатель (который первоначально указывает на 'NULL'), чтобы указать куда-то еще. –

ответ

0

Вы никогда не создаете экземпляр класса MyException, поэтому, когда вы пытаетесь позвонить , у вас нет объекта, на который можно его вызвать.

ли это вместо:

struct MyException socketException; 

... 

socketException.SetMessage("socket connection error"); 
     throw socketException; 
Смежные вопросы