目录
1.QByteArray导致程序运行的异常行为
代码如下:
cpp
void func1()
{
...
int len = 10;
QByteArray arr('0',len);
const char* pData = arr.constData();
func2(pData,len);
...
}
void func2(const char* pData,int len)
{
...
int pos = 0;
quint8 val = pData[pos];
pos++;
...
}
在func2的执行过程中pData的地址会变为0x000000000000,原因是QByteArray是在func1中定义的局部变量,不能使用constData()做函数参数,可以改为用const QByteArray& arr做函数参数。
2.QSpacerItem导致的程序退出时的崩溃问题
代码如下:
cpp
QHBoxLayout* pLayout1 = new QHBoxLayout();
QSpacerItem* pSpacerItem1 = new QSpacerItem(70, 20);
QPushButton* pBtnClear = new QPushButton(QStringLiteral("清空"));
QPushButton* pBtnExport = new QPushButton(QStringLiteral("导出"));
QPushButton* pBtnImport = new QPushButton(QStringLiteral("导入"));
pLayout1->addSpacerItem(pSpacerItem1);
pLayout1->addWidget(pBtnClear);
pLayout1->addWidget(pBtnExport);
pLayout1->addWidget(pBtnImport);
pLayout1->addSpacerItem(pSpacerItem1);
上述的代码会导致程序退出时内存崩溃,问题是因为 pSpacerItem1
被添加到布局中两次。在 Qt 中,布局管理器会自动管理其子控件的内存,但同一个 QSpacerItem
对象不能被添加到多个布局中。