调用QList::push_back插入对象时程序崩溃,求解决建议
问题解决建议
核心问题1:指针访问成员函数的语法错误
你声明的items是指针类型的QList,直接用.调用push_back是错误的,必须使用指针成员访问运算符->:
items->push_back(item);
如果用.的话,编译器会尝试访问指针变量本身的成员(而非指向的QList对象的成员),这会触发未定义行为,直接导致崩溃。
核心问题2:确认QList指针是否完成初始化
检查CPP文件的构造函数,必须确保items被正确分配内存:
// 构造函数中 items = new QList<className>();
如果构造函数里没做这一步,items会是野指针/空指针,调用push_back必然崩溃。
额外注意:className的拷贝兼容性
如果className是QObject的子类(比如继承了QWidget、QObject等),QObject子类是禁止拷贝的,此时QList<className>本身就是非法的,必须改成QList<className*>存储指针:
// 头文件修改 QList<className*> *items; // 成员函数中 className *item = new className(); item->set_name("name"); items->push_back(item); // 注意:析构函数中需要遍历列表delete每个元素,再delete items
如果className不是QObject子类,要确保它有正确的拷贝构造函数和赋值运算符(如果自定义了析构函数,必须遵循三/五法则),否则拷贝实例时可能出现内存问题导致崩溃。
内容的提问来源于stack exchange,提问作者Sean Lau
相关产品推荐
相关产品推荐

