Domanda

Una chiamata a cancellare su una QByteArray genera la seguente eccezione:

* glibc rilevato * / home / Yan / FPS2 / FPS2: doppio libero o la corruzione (fasttop):

0 ?? 1 ??
2 libera il trasferimento 3 QByteArray :: chiaro ()
4 FPSengine :: getDatagrams
5 FPSengine :: xmitData
6 FPSengine :: getData
7 threadDatalog :: eseguito
8 ??
9 start_thread
10 clone
11 ?? 0

Questo è un bug qt o potrebbe avere qualcosa a che fare con il mio codice? So QObject arent thread-safe (definizione QT non più thread chiamando la stessa funzione della stessa istanza di un oggetto), ma la mia funzione ha mutex. Anche io molto raramente ottenere questo errore anche se la stessa funzione viene chiamato di frequente. Post scriptum Un modo per evitare questo è di env var MALLOC_CHECK_ 0

questo URL riferisce un problema simile e alcuni post sembra implicare la sua causato da una versione incompatibile di glibc.

*** glibc rilevato *** Perl: doppia libero o la corruzione (prec!): 0x0c2b7138 ***

È stato utile?

Soluzione 2

questo è causato dal fatto che il l'applicazione è multithreading, l'oggetto appartiene nella mainthread ma è usato in un altro thread, anche se usato mutex sul QBytearray l'UDPsocket che lo utilizza per fare readDatagram è anche nel mainthread. ..e sì, ho bisogno che udpSocket di essere nel thread principale e

Altri suggerimenti

Potrebbe essere un certo numero di cose diverse, tra cui fa riferimento a un QByteArray temporanea restituito da una chiamata di funzione, ma è improbabile (IMO) per essere un bug in Qt.

Ecco alcuni pensieri per il debug:

  • eseguirlo sotto Valgrind e vedere se metterà in evidenza il problema
  • eseguire l'applicazione contro una versione di Qt che ha simboli di debug disponibili per esso
  • abilitare i core dump e vedere se si ottiene un file core

dubito fortemente di aver trovato un bug in qt. Questo errore può verificarsi per una serie di motivi, ma mezzo essenziale per avere un riferimento alla memoria che è già stato liberato. Corri attraverso debugger e provare e vedere che cosa sta causando il problema. Usa gdb e valgrind e, auspicabilmente, si può rintracciare il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top