无法使用指向指针的指针的值获得相同的指针值?

Pla*_*mer 0 c++ pointers sfml

程序崩溃。我正在尝试实现一个Brick ** create_bricks()函数,该函数返回一个指向 Brick 指针的指针(因为我想创建一个 Brick 数组并返回第一个的位置)。我正在拔头发,经过多次尝试和失败、错误和研究后,我做的最后一件事是简化我的代码并逐行检查指针的值。当我在 draw 函数游戏循环中取消引用时the_brick*the_brick它不会获得与new Brick()分配给ptr_brick内部create_bricks()函数的值相同的值 。我正在使用 SFML,但问题在于指针。

注意:如果我通过适当的修改返回 a Brick *create_bricks它可以正常工作(并绘制砖块),但我需要创建多个砖块,而不仅仅是一个。

#include "Brick.h"

int main()
{
    ...

    while (window.isOpen())
    {
        Brick ** ptr_bricks = create_bricks();
        Brick * ptr_brick = *ptr_bricks;
        window.draw(*the_brick);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
Brick ** create_bricks()
{
    Brick * ptr_brick = new Brick();
    ptrBrick->setPosition(150, 20);
    return &ptrBrick;
}
Run Code Online (Sandbox Code Playgroud)
#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
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Som*_*ude 5

问题在于函数中的return语句create_bricks

return &ptrBrick;
Run Code Online (Sandbox Code Playgroud)

这里返回一个指向局部变量的指针ptrBrick。该变量的生命周期将在函数结束时结束,一旦函数结束,您拥有的任何指向它的指针都将失效。

从函数返回“数组”的自然 C++ 解决方案是返回一个std::vector

std::vector<Brick*> create_bricks()
{
    Brick* brick = new Brick;
    brick->setPosition(150, 20);
    return { brick };
}
Run Code Online (Sandbox Code Playgroud)

如果Brick不是多态类,您甚至不需要使用指针向量,而是使用普通Brick对象向量( std::vector<Brick>)。

如果您坚持使用指针,则必须为 分配一个指针数组Brick,这意味着new Brick*[number_of_bricks](或者new Brick[number_of_bricks]如果不需要多态性)。