Ich habe ein Problem, meinen Code zu debuggen. In einigen Qt Slot kann ich das:Segfault bei der Rückgabe des privaten Mitglieds
UIElementInterface* interface = qobject_cast <UIElementInterface*>(sender());
und die folgende Zeile gibt mir einen Segmentierungsfehler:
QStringList data = interface->getSetDefData();
dies nicht
QString hello = interface->getHello();
Die Implementierung von getSetDefData()
innerhalb von UIElementInterface
:
class UIElementInterface
{
public:
...
UIElementInterface(const QStringList& data) : m_setDefData(data)
{
std::cout << qPrintable(m_setDefData[0]) << std::endl; //everything as expected here..
}
QStringList getSetDefData(){return m_setDefData;} //gives seg fault
QString getHello(){return QString("Hello");} //works fine
private:
QStringList m_setDefData;
};
würde ich jede mögliche Hilfe auf diesem schätzen :)
EDIT Basierend auf den Kommentaren i qobject_cast
verwendet zu werfen einen CheckBox
, die den Sender auf jeden Fall (im Falle des Absturzes) ist, und es ist ein Unterklasse QCheckBox
. Also es ist definitiv ihnerits QObject
(ich habe auch die Implementierung überprüft). Wenn ich den Rückgabewert wie vorgeschlagen überprüfe, ist es 0
.
CheckBox* b = qobject_cast<CheckBox*>(sender());
if (b == 0)
{
std::cout << "Here we are" << std::endl;
}
so ist das das Problem. Ich muss noch herausfinden, warum das so ist, aber das verursacht wahrscheinlich den Absturz.
ANOTHER EDIT Druck aus dem Klassennamen sender()->metaObject()->className()
die Wurzel des Übels ausgesetzt:
QSignalMapper
Fall :) geschlossen
Klassische Crash-Fall, wenn 'dieses == NULL', eine NULL (oder ungültig) Zeigerobjekt:' getSetDefData() '' Dereferenzierungen this', die 'getHello()' nicht der Fall ist. – Dummy00001
Die [Dokumentation für 'qobject_cast'] (http://doc.qt.io/qt-4.8/qobject.html#qobject_cast) sagt eindeutig, dass sie' 0' zurückgeben kann, was dasselbe wie ein Null-Zeiger ist, etwas, das Sie offensichtlich haben nicht überprüfen. –
Wenn also die Implementierung für 'getSetDefData()' in einer Klasse wäre, die 'QObject' erbt, würde das nicht passieren? – tobilocker