如递归全部控件路径,函数将导致运行时堆栈溢出

C++语言 码拜 8年前 (2016-09-14) 6520次浏览
void Light::resizeEvent(QResizeEvent* event)
{
Light::resizeEvent(event);          //????????????
int aa = ui->centralWidget->height();//,bb = ui->centralWidget->height();
labelFovXValue->setText(QString::number(aa));
}
warning: C4717: “Light::resizeEvent”: 如递归全部控件路径,函数将导致运行时堆栈溢出
解决方案

5

void Light::resizeEvent(QResizeEvent* event)
{
//Light::resizeEvent(event);          //????????????
int aa = ui->centralWidget->height();//,bb = ui->centralWidget->height();
labelFovXValue->setText(QString::number(aa));
}

3

递归不应太深,否则会导致浅溢出

2

默认栈大小有限制的

3

递归需要有条件来控制, 没有结束条件的无穷递归, 无论分配多大的内存都会溢出, 及时你内存无限大, 函数也不会返回, 执行时间也将是无限长

2

在现实世界中,除时间和空间可能是无限的以外,其它任何事物都是有限的。

2

无限递归,不溢出都不科学

3

你用的是QT。
void QWidget::resizeEvent(QResizeEvent * event)是个虚函数。
你在Light类中重载了这个函数。
因此Light::resizeEvent(event);还是调用的Light中的resizeEvent函数。所以无限循环。
假如void QWidget::resizeEvent(QResizeEvent * event)这个函数不是虚函数,你写的也不正确。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明如递归全部控件路径,函数将导致运行时堆栈溢出
喜欢 (0)
[1034331897@qq.com]
分享 (0)