不能用指向指针的指针的值得到指针的相同值?

Can't get the same value of a pointer using the value of a pointer to pointer?

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

注意:如果我 return 来自 create_bricksBrick * 经过适当的修改它工作正常(并画砖),但是我需要创建多个积木,而不是一个。

#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
}

谢谢

问题出在create_bricks函数中的return语句:

return &ptrBrick;

这里你 return 一个指向 local 变量 ptrBrick 的指针。该变量的生命周期将在函数结束时结束,您拥有的任何指向它的指针将在函数结束后立即失效。

从函数 return 一个 "array" 的自然 C++ 解决方案是 return 一个 std::vector 而不是:

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

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

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