[gelöst] SegFault bei Qt4 wenn eingebettetes-objekt ...

Alles rund um die Programmierung mit Qt
Antworten
ObeliX
Beiträge: 59
Registriert: 14. November 2007 17:47

[gelöst] SegFault bei Qt4 wenn eingebettetes-objekt ...

Beitrag von ObeliX »

hallo,

ich hoffe ja mich nicht total lächerlich zu machen. aber ich habe echt keine idee mehr, warum mein code abschmiert. ich habe ein BugDemo-projekt zusammengestellt in dem eigentlich alles sinnvolle entfernt ist - da passiert also fast nichts mehr ... außer das es abstürzt wenn man auf den knopf drückt. trotzdem konnte mir bis jetzt niemand sagen warum.

ich kann nichtmal sagen was eigentlich die eckdaten/problemzone ist.
nur daß der signal/slot-mechanismus bzw. der moc etwas damit zu tun hat. denke ich jedenfalls, denn nur die variante mit GUI hat das problem. die consolen-version arbeitet sauber. und die versionen unterscheiden sich nur in der main.cpp. (ansonsten sind ja nur noch zwei weitere klassen involviert, wobei die eine die GUI ist (QMainWindow)).

die GUI-version stürzt wahlweise bei nem memcpy ab oder bei einer normalen wertzuweisung (m_iBufferCharCount = cnt;). das kann aber nicht der wirkliche fehlerort sein. mit Qt 4.3.2 stürzt er dann auch verzögert ab und ist schon wieder in der eigenen eventloop der QApplication.
auch valgrind zeigt schon beim starten der anwendung speicherverwaltungsfehler. am ende stimmen mallocs und frees nicht.

die consolen-variante arbeit fehlerlos. valgrind erkennt keine speicher-lecks.

ich bin echt ratlos. schaut euch das Demo doch mal an. ist sehr kurz und übersichtlich. einfach die main_GUI.txt bzw. main_Console.txt zur *.cpp machen und ./build ausführen.

ich hab kubuntu 7.0.4 und es schon mit diversen Qt4-versionen und g++/gcc-versionen versucht. (siehe README.TXT).


MfG Obel
Dateianhänge
Qt4_BugDemo.tgz.tar
(3.51 KiB) 150-mal heruntergeladen
Zuletzt geändert von ObeliX am 15. November 2007 14:15, insgesamt 1-mal geändert.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

mal abgesehen von dem fahrlaessigen int-to-char*-gecaste solltest du dir das mal anschauen:

Code: Alles auswählen


MWnd_IPCConsole::MWnd_IPCConsole(bool bDoConstructorSend/*=false*/, QWidget * parent/*=0*/, Qt::WindowFlags flags/*=0*/)
  : QMainWindow(parent,flags)
{
  setupUi(this);

 // CSysVMsgSendThread * pCMsgSendThread=new CSysVMsgSendThread("/tmp/IPC2Something"); also DAS ist hoechst unguenstig........

 pCMsgSendThread=new CSysVMsgSendThread("/tmp/IPC2Something"); // is besser ....

....
...
ObeliX
Beiträge: 59
Registriert: 14. November 2007 17:47

Beitrag von ObeliX »

ochneeee !!!! ... das glaub ich ja jetzt nicht. :shock:
da haben schon mindestens ein dutzend augen drüber geguckt bevor ich hier gefragt habe und keinem ist es aufgefallen. scheiß copy&past :? sowas banales aber auch (und außerdem wird klar, warum es beim aufruf im konstruktor immer mystischerweise funktioniert hat)

jedenfalls danke an dich und alle anderen die sich das auch angesehen haben um zu helfen.


big thanx
Obel
Antworten