找回密码
 立即注册
收起左侧

使用ui->addwidget出现bug

2
回复
6392
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2016-5-30 16:08:49 显示全部楼层 |阅读模式
1Qter豆
小弟写了个程序,单独运行时没啥问题,但就是关闭程序后就会出现程序有BUG的提示,如下图:


点OK之后



QT如此显示





我通过注释debug后发现,每当我注释掉这句就没问题
  1.     for(i = 0; i < row; i ++)
  2.         for(j = 0; j < column; j ++)
  3.             ui->gridLayout->addWidget(blocks + i * row + j, i, j);
复制代码
我在网上查了一堆资料,他们说可能是内存(指针)泄漏问题,但我实在找不出我哪里搞出野指针了,而且我对QT也不熟悉,所以求老师们帮忙看一下

下面是最主要的三个代码文件:
  1. class start : public QWidget
  2. {
  3.     Q_OBJECT

  4. public:
  5.     explicit start(Block* blocks, int r, int c, int n, QWidget *parent = 0);
  6. ~start();
  7.     QTime sysTime;
  8.     public slots:
  9.         void timeUpdate();

  10. private slots:
  11.     void on_startTrip_clicked();

  12.   private:
  13.     int row;
  14.     int column;
  15.     int cityNum;
  16.     Ui::start *ui;
  17. };
复制代码
  1. start::start(Block* blocks, int r, int c, int n, QWidget *parent) :
  2.     QWidget(parent),
  3.     ui(new Ui::start)
  4. {
  5.     ui->setupUi(this);
  6.     row = r;
  7.     column = c;
  8.     cityNum = n;
  9.    
  10.     int i, j;
  11.     ui->gridLayout->setSpacing(30);
  12.     for(i = 0; i < row; i ++)
  13.         for(j = 0; j < column; j ++)
  14.             ui->gridLayout->addWidget(blocks + i * row + j, i, j);
  15. }
  16. start::~start()
  17. {
  18.     delete ui;
  19. }
复制代码
  1. int main(int argc, char *argv[])
  2. {
  3.     QApplication a(argc, argv);
  4.     //Initializaion
  5.     int n;   
  6.     Block blocks[ROW * COLUMN];
  7.     n = loadMap(blocks, ROW, COLUMN);
  8. //    Form f;
  9. //    f.show();
  10.     start w(blocks, ROW, COLUMN, n);
  11.     w.show();
  12.    
  13.     return a.exec();
  14. }
复制代码

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2016-5-30 19:22:18 显示全部楼层
blocks + i * row + j, i, j  越界了吧。你好好算算。
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-5-30 22:40:57 显示全部楼层
qq1043068972 发表于 2016-5-30 19:22
blocks + i * row + j, i, j  越界了吧。你好好算算。

这个式子的确是错了……但实际上row和column是相等的,我算了一下并没有越界,而且改回去之后bug也没有修正。而且有时候关闭程序后它在qt creator会提示这个:
pure virtual method called
terminate called without an active exception
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了