S'il vous plaît jeter un oeil à mes fichiers source, ils sont un peu trop longtemps pour les poster ici:C++: ce pointeur écrasé
X11Painter.cpp: http://pastebin.com/gu4SrHUr
X11Painter.h: http://pastebin.com/3ktp1Fvn
Le comportement de cette classe est à mon avis très étrange.
Je vais avoir le cas de test suivant:
#include "X11Painter.h"
int main()
{
X11Painter p ;
p.show();
}
avec la Compiler ligne
g++ -O0 -g -o test2 test2.cpp X11Painter.cpp -lX11 -lXfixes -lXinerama
et simplement exécuter effectue les opérations suivantes:
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
Je suis essayer de mapper la fenêtre X11 en X11Painter::show()
Lorsque j'ai commencé à étudier pourquoi X11Painter.cpp: 83 est segfaulting, j'ai découvert que la plupart des variables sont remplacées et complètement différentes dans show()
qu'elles ne l'étaient dans le constructeur.
Je mets le int some_test
pour voir ce qui se passe. Pourquoi diable la valeur change-t-elle? Si printf("%p\n", this)
, le pointeur change également. Je pense que quelque part, le pointeur est écrasé. Mais pourquoi cela se passe-t-il? Le débogage avec ddd m'a indiqué que this-> some_value est modifié juste en quittant le constructeur.
Faire un test court avec un testclass (classe avec un constructeur public, une méthode publique et une variable privée) fonctionne sans aucun problème.
Est-ce que quelqu'un a une idée de pourquoi cette chose étrange se produit? Je sais ce qu'il advient des variables qui se trouvent sur la pile, mais nous en sommes toujours là ...
Est-ce que cela peut être lié aux bibliothèques X11?
Vous devriez rendre vos fichiers source suffisamment petits pour être publiés ici. Cela a deux avantages: premièrement, plus de gens les verront; deuxièmement, en les rendant plus petits, vous pourriez trouver vous-même la source du problème. – TonyK