Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QObject cast上的分段故障_Qt - Fatal编程技术网

Qt QObject cast上的分段故障

Qt QObject cast上的分段故障,qt,Qt,这些值类似于不为null,canconvert为true且有效。但在尝试投射时仍然会出现分段错误。我正在调试,在使用新值调用setValue之前,该值集可能已被删除 QVariant m_model = 0; 是一个成员变量 void Handler::setValue(const QVariant &var) { bool isNull = m_model.isNull(); bool canConvert = m_model.canConvert<QObjec

这些值类似于不为null,canconvert为true且有效。但在尝试投射时仍然会出现分段错误。我正在调试,在使用新值调用setValue之前,该值集可能已被删除

QVariant m_model = 0;
是一个成员变量

void Handler::setValue(const QVariant &var)
{
    bool isNull = m_model.isNull();
    bool canConvert = m_model.canConvert<QObject*>();
    bool isValid = m_model.isValid();

    if(!m_model.isNull() && m_model.canConvert<QObject*>()) {
        bool sConverts = (nullptr != m_model.value<QObject*>());
    }

    m_model = var;
}
void处理程序::setValue(const-QVariant&var)
{
bool isNull=m_model.isNull();
bool canConvert=m_model.canConvert();
bool isValid=m_model.isValid();
如果(!m_model.isNull()&&m_model.canConvert()){
boolsconverts=(nullptr!=m_model.value());
}
m_模型=var;
}

有人能告诉我为什么当m_模型中有一些数据时它会崩溃。

首先,你的代码有一些问题:

QVariant::canConvert()
返回值的类型是否可以转换,而不是实际包含的值是否可以转换。示例:创建一个QVariant,其中QString作为值。调用
myValue.canConvert()
将返回true,即使字符串是“无意义的”。这是因为QVariant通常能够将字符串(如“1.0”)转换为双精度值1.0

QVariant::isValid()
返回包含的类型是否为
QMetaType::UnknownType
。这通常只在创建QVariant而不指定值时发生

QVariant m_model=0
将创建类型为int的QVariant。不要这样做。只需声明它,而不使用
=0
部分。QVariant(与Qt中的其他值类型一样,如QString、QSize等)不需要初始化为null、空或无效。像这样声明它将使
isValid()
返回true,尽管您可能希望它返回false

也就是说,我不确定您希望在代码片段中实现什么。基本上,您是在给m_模型分配一个新的未测试值
var
之前对其进行测试的(为什么?)


正如您所说,您的值
var
(或可能包含的值)可能在调用
setValue()
之前被删除。如果QObject已被删除,且指针未显式设置为
nullptr
,则您正在处理一个QVariant,其中有一个指向该函数的悬空指针。由于
setValue()
不测试新值
var
,因此在
m_模型中会有相同的悬空指针
,每次尝试访问时都会导致崩溃。

在哪一行失败?