nixp.ru v3.0

23 октября 2017,
понедельник,
23:38:49 MSK

DevOps с компанией «Флант»
Longobard написал 30 декабря 2003 года в 13:27 (565 просмотров) Ведет себя как мужчина; открыл 291 тему в форуме, оставил 2499 комментариев на сайте.

Короче обрисовываю проблему подробно:

Есть класс Bolvan:

class Bolvan {
private:
      char* device;
      /*И т.д.*/
protected:
      int sg_fd;
public:
      struct FDError {
             char* message;
            FDError (char* p)  { message = p; }
            };
      Bolvan (const char* io_device);
/*и т.д.*/
};

У этого класса Bolvan усть конструктор:

Bolvan::Bolvan (const char* io_device)
{
      sg_fd = open (io_device, O_RDONLY);
      if (sg_fd < 0) {
            char *msg;
            sprintf (msg, "Unable to open device %s\n", io_device);
#ifdef DEBUG
            sprintf (msg, "open (io_device, O_RDONLY) failed. \n Maybe device name is not valid.\n Check open() call in bolvan.cpp\n");
#endif
            throw Bolvan::FDError (msg);
  }
/*И т.д.*/
};

В драйвере программы:

Bolvan *CB;
try {
      CB = new Bolvan ("/dev/hdc");
}
catch (Bolvan::FDError) {
   delete CB;
};

Проблема: После обработки исключения возникает Segmentation fault. причем даже если я сделаю просто

catch (...) {
}

То все равно возникает SF. В чем фигня? Причем все, что внутри catch выполняется (проверял дебаггером), а затем возникает SF. Самая проблема, что на одном форуме один челове выложил пример с исключением, котолрый у него РАБОТАЛ. Я этот пример компилю, у меня не работает. Может g++ обновить? У меня g++ 3.2

Помогите пожалуйста.

Anarchist

Не понимаю: на фига лишние темы плодить? С одним и тем же вопросом…