Gambas France BETA


Pas de compte ? Incription

segmentation fault (11)

Ce sujet est résolu.

1
AuteurMessages
valaquarus#1 Posté le 15/2/2019 à 21:46:42
-- Unus Ex Altera --Bonsoir à tous,
je viens de découvrir un bug gênant dans mon petit prog qui provoque une segmentation fault comme dit dans le titre.
Je test une connexion avec un serveur pop dans une fonction qui me renvoie une valeur booléenne. Si la connexion est bonne pas de souci le programme continue et j'accède à toutes les autres parties de celui-ci par contre si la connexion n'est pas bonne, compte faux ou inexistant alors tant que je reste dans l'onglet du test tout va bien le programme continu mais dès que je veux aller sur un autre onglet le programme s'arrête immédiatement et l'IDE m'envoie une erreur de segmentation.

Voici le bout de code de la fonction :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
PUBLIC FUNCTION TestServeur() AS BOOLEAN
DIM POP1 AS Pop3Client
DIM rep AS BOOLEAN

POP1 = NEW Pop3Client
POP1.host = txtServer.Text
POP1.User = txtUser.text
POP1.Password = txtPass.text
POP1.port = txtPort.text
POP1.Encrypt = IIf(chkSSL.value, 1, 0)

TRY POP1.Open

IF NOT ERROR THEN
POP1.Close
Message.Info(("La connexion au serveur ") & " < " & POP1.host & " > " & (" est efficiente."))
rep = TRUE
ELSE

Message.Info(("La connexion au serveur ") & " < " & txtServer.Text & " > " & (" a échouée."
rep = FALSE
ENDIF
POP1 = NULL
RETURN rep

END


Je me doute que le problème vient de la connexion qui ne se fait pas mais delà à mettre les pointeurs de la mémoire en l'air je ne comprends pas.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#2 Posté le 16/2/2019 à 18:11:51
-- Unus Ex Altera --Bonsoir,
je continue de vous raconter (ma vie).
en fait ce n'est pas la connexion qui provoque cette erreur de segmentation mais les fioritures sons que j'ai mis partout (ça me plaît) et il y en a un déclenchement de son qui provoque cette erreur, en cliquant sur un des onglet d'un tabstrip. Bon j'ai procédé en ordre suite à la demande de la mailing list qui voulait un petit programme de moins de 256 ko pour tester cette erreur, donc en éliminant petit à petit les éléments "inutiles", en commentant une ligne après l'autre et en testant à la suite je suis tombé sur celle qui provoquait l'erreur. Ceci dit je n'ai toujours pas compris en quoi il y a "une perte de d'adressage mémoire" de la part des pointeurs à ce moment là mais un comment de la ligne et hop plus d'erreur.
Voici le bout de code incriminé :
1
2
3
4
5
6
7
PUBLIC SUB TabStrip1_Click() 'son sur les différents tab du tabstrip principal

SELECT CASE TabStrip1.Index
CASE 0 TO 4
IF tbstp.Count > 1 THEN tbstp.Index = 1
' If chkNoSon.value = False Then Module1.shade 'provoque une erreur de segmentation
END SELECT

La ligne commentée est celle qui provoquait la dite erreur.
Maitenant, j'attends avec impatience les commentaires des pro de la mailing list qui ont bien voulu se pencher sur le berceau de petit programme.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#3 Posté le 16/2/2019 à 21:19:00
Salut,
Deux questions:
A) qui a-t-il dans Module1.shade pour que cela plante?
B) tu écris CASE 0 TO 4, cela implique donc qu'il y a 5 tab dans ton tabstrip.
Pourquoi alors tester la condition IF tbstp.Count > 1 ? puisque tu sait qu'il y a 5 tab...
;)
Flachy Joe#4 Posté le 17/2/2019 à 12:06:05
Iguane : Il Gambas Uniquement pour Activer ses NEurones@spheris
A) +1 pour savoir ce qu'il y a dans Module1.shade
B) tu confonds TabStrip1 et tbstp
;) Flachy Joe ;)
valaquarus#5 Posté le 17/2/2019 à 15:14:21
-- Unus Ex Altera --
Salut,
Deux questions:
A) qui a-t-il dans Module1.shade pour que cela plante?
B) tu écris CASE 0 TO 4, cela implique donc qu'il y a 5 tab dans ton tabstrip.
Pourquoi alors tester la condition IF tbstp.Count > 1 ? puisque tu sait qu'il y a 5 tab...
;)

Bonjour Sphéris,
module1.shade est juste un son
1
2
3
4
5
6
7
PUBLIC SUB shade()

TRY MonSon = Sound.Load("/usr/share/cherchmail/sons/shade.ogg")
TRY MonSon.Play()
WAIT 0.1

END

Il ya effectivement 5 tab dans tabstrip1 et dans le premier tab il y a un autre tabstrip : tbstp dont l'index zéro est juste pour afficher un message, comme mentionné par Flachy Joe. Ce n'est pas le son qui plante mais l'appel à ce son par le tabstrip1 si je décommente la ligne suivante :
1
IF chkNoSon.value = FALSE THEN Module1.shade
(peut être l’emboîtement des tabstrip est il un début de piste mais ça m'embêterais)
Et je peux assurer qu'il suffit de remettre cette ligne pour que ça plante radicalement.
Philippe

Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#6 Posté le 17/2/2019 à 17:23:20
-- Unus Ex Altera --La suite, juste pour rire :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PUBLIC SUB TabStrip1_Click() '********************************************************* son sur les différents tab du tabstrip principal

SELECT CASE TabStrip1.Index '*
CASE 0 TO 4 '*
IF tbstp.Count > 1 THEN tbstp.Index = 1 '*
' If chkNoSon.value = False Then Module1.shade '* provoque une erreur de segmentation
END SELECT '*

END '***********************************************************************************

PUBLIC SUB TabStrip1_MouseDown()

IF chkNoSon.value = FALSE THEN Module1.shade ' ne provoque pas l'erreur de segmentation

END

Et ce n'est pas parce que c'est dans le test Case que ça plante c'est juste le Click() versus MouseDown() qui fait la différence. c'est de plus en plus obscure pour moi.
Philippe

Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
1