• 7850阅读
  • 25回复

Qt 在ARM板上运行时segmentation fault的问题 [复制链接]

上一主题 下一主题
离线nautiluslee
 

只看楼主 倒序阅读 楼主  发表于: 2016-07-11
做了一个ARM板上运行的Qt程序,点击Debug按钮时编译问题,开机画面也能显示出来,就是运行到一个创建label行的时候会出现segmentation fault的信息,然后ARM板上屏幕就黑了。我是在类声明中声明了一组label数组,然后在构造函数中创建label的实例,部分代码如下:
    QLabel *label[50];
    QPushButton *button[50];

    label = new QLabel(this);
我在这句前后加了打印信息,前面的能打印后面就没有,所以应该是这句出了问题。
有人遇到过相同的情况吗?
离线大漠之鹰

只看该作者 1楼 发表于: 2016-07-11
for(int i=0; i < 50; i++)
{
    label=new QLabel(this);
}
本是后山人,偶作前堂客,醉舞经阁半卷书,坐井说天阔。大志戏功名,海斗量福祸,论到囊中羞涩时,怒指乾坤错
QQ:874164244
离线nautiluslee

只看该作者 2楼 发表于: 2016-07-11
回 大漠之鹰 的帖子
大漠之鹰:for(int i=0; i < 50; i++)
{
    label=new QLabel(this);
}
 (2016-07-11 11:49) 

我本来就是用for循环创建label的,有个控制label数量的变量是存在配置文件中。
离线兵317

只看该作者 3楼 发表于: 2016-07-11
析构函数中delete这些创建的label了吗?保险起见还是加上吧,虽说Qt中有某些机制让写delete的少。开发板上运行Qt发生段错误的原因,最常见的应该就是指针问题了。
离线大漠之鹰

只看该作者 4楼 发表于: 2016-07-11
for(int i=0; i < 50; i++)
{
    label=new QLabel(this);
}
label后边跟索引 了吗?上边的代码怎么没有了,是论坛的问题吗?段错误是访问空指针造成的
本是后山人,偶作前堂客,醉舞经阁半卷书,坐井说天阔。大志戏功名,海斗量福祸,论到囊中羞涩时,怒指乾坤错
QQ:874164244
离线大漠之鹰

只看该作者 5楼 发表于: 2016-07-11
真是论坛的问题吗?label后边的方括号i没了
本帖提到的人: @XChinux
本是后山人,偶作前堂客,醉舞经阁半卷书,坐井说天阔。大志戏功名,海斗量福祸,论到囊中羞涩时,怒指乾坤错
QQ:874164244
离线uidab

只看该作者 6楼 发表于: 2016-07-11
回 大漠之鹰 的帖子
大漠之鹰:for(int i=0; i < 50; i++)
{
    label=new QLabel(this);
}
label后边跟索引  了吗?上边的代码怎么没有了,是论坛的问题吗?段错误是访问空指针造成的 (2016-07-11 13:01) 

一般情况arm返回的段错误都和指针有关。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线nautiluslee

只看该作者 7楼 发表于: 2016-07-11
回 兵317 的帖子
兵317:析构函数中delete这些创建的label了吗?保险起见还是加上吧,虽说Qt中有某些机制让写delete的少。开发板上运行Qt发生段错误的原因,最常见的应该就是指针问题了。 (2016-07-11 12:20) 

那我创建的是数组,请问该怎么delete呢?
离线nautiluslee

只看该作者 8楼 发表于: 2016-07-11
回 大漠之鹰 的帖子
大漠之鹰:真是论坛的问题吗?label后边的方括号i没了
 (2016-07-11 13:02) 

没关系,我知道你要表达那个意思
离线大漠之鹰

只看该作者 9楼 发表于: 2016-07-11
回 uidab 的帖子
uidab:一般情况arm返回的段错误都和指针有关。 (2016-07-11 13:27) 

什么啊,看清楚我说的啥啊。我说的论坛有问题,回复的内容会丢东西
本是后山人,偶作前堂客,醉舞经阁半卷书,坐井说天阔。大志戏功名,海斗量福祸,论到囊中羞涩时,怒指乾坤错
QQ:874164244
离线大漠之鹰

只看该作者 10楼 发表于: 2016-07-11
只有arm上有问题吗?其它平台会有问题吗?代码可以发上来看看?Qt的版本是多少?
本是后山人,偶作前堂客,醉舞经阁半卷书,坐井说天阔。大志戏功名,海斗量福祸,论到囊中羞涩时,怒指乾坤错
QQ:874164244
离线nautiluslee

只看该作者 11楼 发表于: 2016-07-11
回 大漠之鹰 的帖子
大漠之鹰:只有arm上有问题吗?其它平台会有问题吗?代码可以发上来看看? (2016-07-11 14:07) 

我是在类声明中定义的label和pushbutton数组,然后在构造函数通过读取ini配置文件,来显示label和pushbutton。

声明:
private:
    Ui::events *ui;

    int i, total_num, label_num, pushButton_num;
    QLabel *label[50];
    QPushButton *button[50];
    QSettings *events_setting;
    QString str, strg, strs, strt;
    QStringList list;

构造函数:
    events_setting = new QSettings("/test/config/Events.ini", QSettings::IniFormat);
    QFile file("/test/config/Events.ini");
    file.open(QFile::ReadOnly);
    QTextStream in(&file);
    str = in.readLine();
    list = str.split(",");

    total_num = events_setting->value("/total_num/num").toInt();
    label_num = events_setting->value("/label_num/num").toInt();
    pushButton_num = events_setting->value("/pushButton_num/num").toInt();

    for(i=0;i<label_num;i++)
    {
        strg = list + "geometry";
        strs = list + "stylesheet";
        strt = list + "text";
        qDebug()<<"1";
        label = new QLabel(this);
        qDebug()<<"2";
        label->setGeometry(events_setting->value(strg).toRect());
        label->setStyleSheet(events_setting->value(strs).toString());
        label->setText(events_setting->value(strt).toString());
        label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    }
离线nautiluslee

只看该作者 12楼 发表于: 2016-07-11
回 大漠之鹰 的帖子
大漠之鹰:只有arm上有问题吗?其它平台会有问题吗?代码可以发上来看看?Qt的版本是多少?
 (2016-07-11 14:07) 

Linux上同样的代码使正常的
离线nautiluslee

只看该作者 13楼 发表于: 2016-07-11
回 大漠之鹰 的帖子
大漠之鹰:只有arm上有问题吗?其它平台会有问题吗?代码可以发上来看看?Qt的版本是多少?
 (2016-07-11 14:07) 

对了,我想起来,另外一个子界面我调用close函数后,再点进去checkbox被勾选的状态没有改变。这是不是说明了子界面的控件都没有被删除?
离线uidab

只看该作者 14楼 发表于: 2016-07-11
回 大漠之鹰 的帖子
大漠之鹰:
什么啊,看清楚我说的啥啊。我说的论坛有问题,回复的内容会丢东西

确实会丢,这个可能和发代码没用代码  "  <> "  括起来有关系。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线nautiluslee

只看该作者 15楼 发表于: 2016-07-11
回 uidab 的帖子
uidab:确实会丢,这个可能和发代码没用代码  "  <> "  括起来有关系。 (2016-07-11 14:50) 

版主,能帮我看下问题吗
离线uidab

只看该作者 16楼 发表于: 2016-07-11
回 nautiluslee 的帖子
nautiluslee:[表情]版主,能帮我看下问题吗 (2016-07-11 14:55) 

我现在也在arm下开发,调试起来确实不方便,从现象上看基本确定是和指针有关的。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线nautiluslee

只看该作者 17楼 发表于: 2016-07-11
回 uidab 的帖子
uidab:我现在也在arm下开发,调试起来确实不方便,从现象上看基本确定是和指针有关的。 (2016-07-11 14:57) 

鉴于之前关闭子界面的时候里面的控件状态并没有改变,我想应该是没有delete的原因,但是试了几种delete方法都不行
离线uidab

只看该作者 18楼 发表于: 2016-07-11
回 nautiluslee 的帖子
nautiluslee:[表情]版主,能帮我看下问题吗 (2016-07-11 14:55)

从代码上看你是要定义指针数组,new之前没有判断NULL,new之后没有判断是否成功。一般来讲PC上new之后都会成功,我不知道你的arm上空间大小多大。从你的说明上看是new出错了。
另外,没看到你是怎么删除的。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线uidab

只看该作者 19楼 发表于: 2016-07-11
回 nautiluslee 的帖子
nautiluslee:鉴于之前关闭子界面的时候里面的控件状态并没有改变,我想应该是没有delete的原因,但是试了几种delete方法都不行 (2016-07-11 15:01) 

arm上你可以用这个QStackedWidget
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线nautiluslee

只看该作者 20楼 发表于: 2016-07-11
回 uidab 的帖子
uidab:从代码上看你是要定义指针数组,new之前没有判断NULL,new之后没有判断是否成功。一般来讲PC上new之后都会成功,我不知道你的arm上空间大小多大。从你的说明上看是new出错了。
另外,没看到你是怎么删除的。
 (2016-07-11 15:04) 

你说的arm上的空间是指什么空间?

一种是在析构函数里删除的:
linemenu::~linemenu()
{
    delete ui;

    
    for(i=0;i<50;i++)
    {
        delete label;
    }
    for(i=0;i<50;i++)
    {
        delete button;
    }
    for(i=0;i<50;i++)
    {
        delete box;
    }
    
}

另外一种方法是在new之后,接了一行设置属性:
label->setAttribute(Qt::WA_DeleteOnClose);
离线uidab

只看该作者 21楼 发表于: 2016-07-11
回 nautiluslee 的帖子
nautiluslee:你说的arm上的空间是指什么空间?
一种是在析构函数里删除的:
linemenu::~linemenu()
....... (2016-07-11 15:11) 

空间是指内存加硬盘。毕竟是嵌入式,要考虑性能。

我去年也按你这种方式试过,执行top命令查看 new  widget之前和之中,以及delete widget之后,发现delete之后很久使用的内存数值都不下降,就放弃这种方式了。毕竟完成任务要紧,需要优化可以慢慢来。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线nautiluslee

只看该作者 22楼 发表于: 2016-07-11
回 uidab 的帖子
uidab:空间是指内存加硬盘。毕竟是嵌入式,要考虑性能。
我去年也按你这种方式试过,执行top命令查看 new  widget之前和之中,以及delete widget之后,发现delete之后很久使用的内存数值都不下降,就放弃这种方式了。毕竟完成任务要紧,需要优化可以慢慢来。 (2016-07-11 15:25) 

请问这跟创建的子界面类型有关系吗?我的主界面是mainwindow,子界面都是dialog。是不是关闭dialog的时候里面的控件就是不会销毁的?
离线uidab

只看该作者 23楼 发表于: 2016-07-11
回 nautiluslee 的帖子
nautiluslee:请问这跟创建的子界面类型有关系吗?我的主界面是mainwindow,子界面都是dialog。是不是关闭dialog的时候里面的控件就是不会销毁的? (2016-07-11 16:14) 

肯定会销毁的。你不是在Linux上没问题嘛!!
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线nautiluslee

只看该作者 24楼 发表于: 2016-07-11
回 uidab 的帖子
uidab:肯定会销毁的。你不是在Linux上没问题嘛!!
 (2016-07-11 17:22) 

也对哦
离线大漠之鹰

只看该作者 25楼 发表于: 2016-07-13
可以远程gdb跟一下
本是后山人,偶作前堂客,醉舞经阁半卷书,坐井说天阔。大志戏功名,海斗量福祸,论到囊中羞涩时,怒指乾坤错
QQ:874164244
快速回复
限100 字节
 
上一个 下一个