我有一个与外部应用程序通信的应用程序,它可以控制设备。当新数据到达此设备时,我的应用程序应向此设备发送“答案”。与外部应用程序的通信是通过一些回调函数完成的,我使用信号/插槽将正确的消息传递给回调。 我的问题是,在原始信号返回后,应用程序崩溃并出现SIGSEGV错误。据我所知,这个错误指的是内存中的故障。由于外部应用程序可以处理/破坏/破坏原始数据,您能告诉我这是否是一种使用信号/插槽机制的安全方法?或者这可能导致了SIGSEGV?贝娄,我发布了一个代码片段作为示例:
MyClass::MyClass()
{
notifierData = new QWinEventNotifier(HandleData);
objectItem = new ObjectItem();
connect(notifierData,SIGNAL(activated(HANDLE)),SLOT(newDataSlot(HANDLE)));
QObject::connect(this, SIGNAL(objectData(int, QByteArray)), objectItem, SLOT(dataChangedSlot(int, QByteArray)), Qt::QueuedConnection) ;
}
void MyClass::newDataSlot(HANDLE)
{
DataType data;
GetDataFromExternalCallback(&data);
QByteArray bytearrayData(data.str);
emit objectData(data.TC_Index, bytearrayData);
}
void ObjectItem::dataChangedSlot(int index, QByteArray data)
{
emit dataChanged(index, data);
}
DeviceInterface::DeviceInterface()
{
Init(Line1);
}
void SetObjectItem(ObjectItem *anObjectItem)
{
objectItem = anObjectItem;
if(objectItem != NULL)
connect(objectItem, SIGNAL(dataChanged(int, QByteArray)), this, SLOT(newDataRecevied(int, QByteArray)), Qt::QueuedConnection);
}
void DeviceInterface::newDataRecevied(int index, QByteArray data)
{
QString messageToDisplay = "Reply Answer";
if(objectItem != NULL)
{
objectItem->updateDeviceDisplay(index, messageToDisplay);
}
}
bool DeviceInterface::updateDeviceDisplay(int index, QString text)
{
//Line1 is class member: char Line1[20]
sprintf_s(Line1, 20, "%s", UnicodeToCodePage(1253,text.toStdWString().c_str()));
SendDataWithExternalCallback(&Line1);
return true;
}