【发布时间】:2020-07-20 13:59:39
【问题描述】:
程序崩溃。我正在尝试实现一个 Brick ** create_bricks() 函数,该函数返回一个指向 Brick 指针的指针(因为我想创建一个 Bricks 数组并返回第一个的位置)。我把头发拉出来,在几次尝试失败、错误和研究之后,我做的最后一件事是简化我的代码并逐行检查指针的值。当我在绘图函数游戏循环中将the_brick 取消引用为*the_brick 时,它不会获得与new Brick() 在create_bricks() 函数内分配给ptr_brick 的值相同的值。我正在使用 SFML,但问题在于指针。
注意:如果我从 create_bricks 返回一个 Brick * 并进行适当的修改,它可以正常工作(并绘制砖块),但我需要创建多个砖块,而不仅仅是一个。
#include "Brick.h"
int main()
{
...
while (window.isOpen())
{
Brick ** ptr_bricks = create_bricks();
Brick * ptr_brick = *ptr_bricks;
window.draw(*the_brick);
}
return 0;
}
Brick ** create_bricks()
{
Brick * ptr_brick = new Brick();
ptrBrick->setPosition(150, 20);
return &ptrBrick;
}
#include "Brick.h"
Brick::Brick()
{
LOG(INFO) << "Brick constructor";
setPosition(10, 10);
setSize(sf::Vector2f(100, 20));
setFillColor(sf::Color::Green);
setOutlineThickness(1);
}
Brick::~Brick()
{
LOG(INFO) << "Brick destructor";
//dtor
}
谢谢
【问题讨论】:
-
返回
Brick *不会阻止您创建多个砖块。 -
@bipll 是的,但更不安全。
-
至少不是UB。