Autore Topic: Errore di segmentazione (11) facendo me.close  (Letto 918 volte)

Offline Michy9393

  • Gran Maestro dei Gamberi
  • *****
  • Post: 570
  • Ubuntu: Linux for Human Beings
    • Mostra profilo
Errore di segmentazione (11) facendo me.close
« il: 21 Aprile 2013, 21:43:33 »
Con la nuova versione 3.4.1 ho questo errore e non capisco perchè!
Ho un form e cliccando su un tasto che richiama questo codice:
Codice: [Seleziona]
Me.Close()
FMain.Show

E mi da questo errore:
Citazione
The program has stopped unexpectedly:
Errore di segmentazione (11)

Please send a bug report to the following mail address:
gambas@users.sourceforge.net

Prima non me lo faceva! Sto parlando di formulinux...e l'apertura dei form non mi hanno mai dato problemi fin dall'inizio!

Edit: Alcune volte me lo fà altre no! Perchè?!
« Ultima modifica: 21 Aprile 2013, 21:45:32 da Michy9393 »

Offline splugenbrau

  • Grande Gambero
  • ***
  • Post: 205
    • Mostra profilo
Re: Errore di segmentazione (11) facendo me.close
« Risposta #1 il: 22 Aprile 2013, 20:02:02 »
Non conosco Formulinux, ma se Gambas é scritto a sua volta su qualcosa di simile al linguaggio C...
...in C un "segmentation fault" succede ogniqualvolta si cerca di accedere a uno spazio di memoria (RAM) non ancora allocato dal Sistema Operativo o quantomeno dal tuo programma, o dal tuo programma è già stato disimpegnato. Magari questo succede utilizzando un puntatore che è già stato sottoposto a Free().
Dalle linee di codice che riporti sembra quasi che prima chiudi una finestra con:
me.Close()
e poi tenti di visualizzarla con
Show()
La ragione per cui a volte da errore e a volte no può dipendere dal Garbage Collector del C o del Linux che libera la memoria non più usata con un certo ritardo anche aleatorio. Questo perchè è un programma autonomo con un suo thread.
Saluti.javascript:void(0);

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Errore di segmentazione (11) facendo me.close
« Risposta #2 il: 22 Aprile 2013, 21:47:45 »
Ma ti da questo errore solo in certe sub o lo fa a random?
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
Re: Errore di segmentazione (11) facendo me.close
« Risposta #3 il: 22 Aprile 2013, 22:39:05 »
non sò se è giusto ma per logica mi viene da pensare che non puoi aprire un form se prima hai chiuso quello che lo deve aprire, lo esegue in maniera casuale perchè per chiudere un form ci vuole un pò di tempo e in questo tempo gambas continua a leggere il codice e percui funziona bene ma quando il tempo di chisura del form diminuisce gambas non riesce a finire di leggere il codice percui ti dà errore

è solo una supposizione ma ti consiglio di scambiarli
prima apri il secondo form poi chiudi il primo
form"x".show
me.close
;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.276
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Errore di segmentazione (11) facendo me.close
« Risposta #4 il: 23 Aprile 2013, 00:03:08 »
Ho provato il codice di Michy9393 in questo modo:
Codice: gambas [Seleziona]

Public Sub Button1_Click()

   Me.Close()
   FMain.Show

End

A me non dà alcun tipo di errore, e funziona perfettamente.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Errore di segmentazione (11) facendo me.close
« Risposta #5 il: 23 Aprile 2013, 00:19:46 »
Con la nuova versione 3.4.1 ho questo errore e non capisco perchè!
Ho un form e cliccando su un tasto che richiama questo codice:
Codice: [Seleziona]
Me.Close()
FMain.Show

E mi da questo errore:
Citazione
The program has stopped unexpectedly:
Errore di segmentazione (11)

Se non sbaglio, tu chiudi la Form attiva e subito dopo attivi la FMain. Sarebbe bene sapere come hai acceduto alla FormX che disattivi, chiudendola. É una Form modale? Se la Form FMain è già attiva non hai bisogno di attivarla un'altra volta. Infatti, se la FormX è modale, basta che tu comandi il Me.close ed il controllo ritorna alla Form genitore. Non occorre fare altro; se, invece la Form non è modale, ma è attiva, se non ci sono alttre Form frapposte fra La FMain e la FormX, appena chiusa, la FMain dovrebbe ritornare attiva automaticamente. Nel caso in cui ci siano altre Form attive, successive alla FMain, puoi provare con FMain.visibile =True.

Consiglio: utilizza sempre Form modali (Formx.ShowModal). Il passaggio alla form genitore è assolutamente semplice, funzionante sempre e permette di inibire eventuali click involontari sulle Form attivate prima della Formx corrente.
 :ciao:
:ciao:

Offline Michy9393

  • Gran Maestro dei Gamberi
  • *****
  • Post: 570
  • Ubuntu: Linux for Human Beings
    • Mostra profilo
Re: Errore di segmentazione (11) facendo me.close
« Risposta #6 il: 23 Aprile 2013, 08:24:42 »
Ok comunque ho risolto! Mi dava questo errore perchè usato Showmodal...e poi quando arrivavo nel form chiamato facevo me.close... ho risolto con Show e poi nel form in questione me.close ;)