У меня сейчас большая проблема. Я получаю ошибку сегментации в своем коде, и я прошел через нее с помощью отладчика. Из объекта я читаю элемент const char* name
, чтобы распечатать его с помощью printf
. И вот где мой segfault приходит. Я бы предположил, что указатель на объект недействителен, но из gdb я могу проверить все значения этого объекта, и содержимое name
именно то, что должно быть. Я абсолютно не знаю, почему я получаю ошибку сегментации.
Так по каким причинам моей программе не разрешено читать некоторые данные, а gdb разрешено?
edit: для тех людей, кто еще не понял, я никого не прошу исправлять мои проблемы, я просто хочу знать, как и в каких сценариях отладчику разрешено читать некоторые данные, а моей программе нет . Я добавил скриншот в качестве доказательства того, что я ничего не придумываю, но мне не нужно, чтобы вы понимали мой код.
Просто немного угловой информации. Моя программа представляет собой плагин для приложения Qt. Он использует API плагинов Qt для загрузки плагинов через lib<PluginName>.so
.
g++ (Debian 4.9.2-10) 4.9.2 GNU gdb (Debian 7.7.1+dfsg-5) 7.7.1
редактировать: я добавил скриншот, чтобы лучше увидеть проблему. Инициализация выполняется в конструкторе.
.
class PickingHandler {
public:
const char* name;
PickingHandler(const char* name) : name(name) {}
[...]
virtual void Drag(PickResult) = 0;
};
class ConnectHandler : public PickingHandler {
public:
ConnectHandler() : PickingHandler("connect handler") {}
[...]
void Drag(PickResult) override;
};