Ecriture de texte qui fait planter le programme

Problème avec un insertHtml()

a marqué ce sujet comme résolu.

Salut tout le monde,

Je développe une application sur Qt en ce moment qui a pour but (entre autre) d'afficher des logs de ce qui se passe en live. J'utilise pour cela un QTextBrowser, histoire de pouvoir faire un minimum de mise en page HTML. Mais je rencontre un problème lors de l'écriture. En effet, au bout d'un nombre indéterminé d'affichage j'ai toujours une erreur qui arrive lors de l’exécution. Une erreur qui n'est jamais la même d'ailleurs :o

Mon code qui fait bugger est très bref:

1
2
QString phrase("<b>test</b>");
this->ui.logs->insertHtml(phrase);

Voici des exemples d'erreurs que je peux avoir:

http://puu.sh/gEyNb/027ece8a98.png / http://puu.sh/gEyy5/9c48b0f46b.png / http://puu.sh/gEyJA/7af872386a.png

Et le comportement de ma fenetre :

Je ne comprends pas ce qui peut poser problème ici. Que j'affiche ce message 5 fois par seconde ou 50 fois ça pose le même problème. L'erreur changeant tout le temps Google n'arrive pas à m'aider. Est-ce une limitation du C++ ou de Qt pour éviter une surcharge ou je ne sais quoi?

Merci d'avance,

Benj9 :)

+0 -0

Après avoir fait plusieurs tests c'est vraiment un comportement aléatoire que j'ai là, ça peut marcher tout le long ou bien crasher au bout de qques secondes… Du coup j'ai pensé à un problème de mémoire peut être?

Je ne pense pas que cela puisse aider mais bon :

Code qui écrit dans la box (le même que celui mis dans le premier post) :

1
2
QString phrase("<b>test</b> <br />");
this->ui.logs->insertHtml(phrase);

L'élément this->ui.logs :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Ui_qtClass
{
public:
[...]
    QTextBrowser *logs;
    [...]

logs = new QTextBrowser(centralWidget);
logs->setObjectName(QStringLiteral("logs"));
logs->setHtml(QApplication::translate([...]));

[...]

Je ne comprends pas ce que tu entends pas exemple minimale? L'écriture se trouve dans une fonction qui est appelé ~50 fois/sec. La partie QT du code a été crée via le Qt Designer de l'add-in visual studio.

+0 -0

Je ne comprends pas ce que tu entends pas exemple minimale? L'écriture se trouve dans une fonction qui est appelé ~50 fois/sec. La partie QT du code a été crée via le Qt Designer de l'add-in visual studio.

Un code que je peux lancer sur ma machine et qui reproduise le plantage…

Je ne pense pas que cela puisse aider mais bon :

Si cela peut aider car ton code n'a pas d'érreur susceptible de produire ce problème, le problème est donc ailleurs !

Malheureusement j'utilise un Leap Motion et sa librairie donc je ne pourrais te fournir un code que tu pourrais executer…

Oui c'est ce que je pensais, c'est pour cela que j'ai émis la question sur une possible limitation de QT ?

+0 -0

Malheureusement j'utilise un Leap Motion et sa librairie donc je ne pourrais te fournir un code que tu pourrais executer…

Benj9

Qu’est ce que tu ne comprend pas dans minimal ? Osef de Leap Motion et ton application, grugru demande simplement un code simple, compilable, reproduisant le problème.

+0 -0

@Benj9: on peut pas deviner l'erreur sans voir le code qui pose problème. Un code minimal nous permettrait de reproduire l'erreur et de trouver le problème. Là on peut pas faire grand chose pour t'aider.

C'est probablement un comportement indéfini, c'est à dire que tu ne respectes probablement pas une des contraintes d'utilisation des tableaux de Qt (et plus généralement des contraintes du C++). Par contre, généralement, l'erreur n'est pas là où le message d'erreur apparaît (c'est le gros problème avec les comportements indéfinis - d'où le fait que le code que tu donnes ne peut pas nous aider).

Une règle de base : toujours vérifier les conditions d'utilisations avec un assert. Par exemple, avant d'utiliser un pointeur ou [] :

1
2
3
4
5
6
7
// utilisation d'un pointeur
Q_ASSERT(p);
p->doSomething();

// utilisation d'un tableau
Q_ASSERT(v.size() > i);
v[i];

Commence par ajouter ça à TOUTES tes lignes de code qui utilisent des pointeurs et tableaux.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte