Пожалуйста, посмотрите на мои исходные файлы, они слишком длинны, чтобы разместить их здесь:
X11Painter.cpp: <a href="http://pastebin.com/gu4SrHUr" rel="nofollow">http://pastebin.com/gu4SrHUr</a>
X11Painter.h: <a href="http://pastebin.com/3ktp1Fvn" rel="nofollow">http://pastebin.com/3ktp1Fvn</a>
Поведениеэтого класса, на мой взгляд, очень странно .
У меня следующий контрольный пример:
#include "X11Painter.h"
int main()
{
X11Painter p ;
p.show();
}
Компиляция с помощью строки
g++ -O0 -g -o test2 test2.cpp X11Painter.cpp -lX11 -lXfixes -lXinerama
и просто запустив его, выполните следующие действия:
this->some_test=1234
this->screen:0
1:: this->display='0x8b73008'; this->window='77594625'
width: 3200
0xbff91bdc
this->some_test=1234
this->some_test=3682292
Segmentation fault
Я пытаюсь отобразить окно X11 в X11Painter::show()
Когда я начал исследовать, почему X11Painter.cpp: 83является segfaulting, я обнаружил, что большинство переменных перезаписываются и полностью отличаются в show()
, чем они были в конструкторе.
Я положил int some_test
, чтобы увидеть, что происходит.Почему, черт возьми, значение меняется?
Если я сделаю printf("%p\n", this)
, указатель также изменится.Я подозреваю, что где-то указатель this перезаписывается.Но почему это происходит?Отладка с помощью ddd сказала мне, что this-> some_value изменяется прямо при выходе из конструктора.
Выполнение короткого теста с использованием testclass (класса с открытым конструктором, одним открытым методом и одной закрытой переменной) работает без проблем..
У кого-нибудь есть идея, почему происходит эта странная вещь?Я знаю, что происходит с переменными, лежащими в стеке, но мы все еще находимся в основном там ...
Может ли это быть связано с библиотеками X11?